上篇簡書寫了在進行推送時的前期的準備,這次就從集成代碼開始寫了
iOS10中因為增加了通知的擴展践美,所以對于擴展部分也需要一個APP id述寡,并且這個id要和項目前綴類似。和以前的區(qū)別是顶滩,這個項目用了兩個APP ID余掖,4個Provisioning Profile文件(兩個開發(fā)環(huán)境,兩個生產環(huán)境)诲祸。以bundle id為com.umeng.umpmessage的項目為例:
請按著11.ios證書配置教程配置浊吏,他這個是以bundle id為com.umeng.umpmessage創(chuàng)建一個開發(fā)的描述文件,上傳商店的描述文件救氯,然后在以bundle id為com.umeng.umpmessage.* ? ? 創(chuàng)建一個開發(fā)的描述文件找田,上傳商店的描述文件,這就他所說的iOS10中因為增加了通知的擴展着憨,所以對于擴展部分也需要一個APP id墩衙,并且這個id要和項目前綴類似。和以前的區(qū)別是甲抖,這個項目用了兩個APP ID漆改,4個Provisioning Profile文件。?
在上一篇教程中我們所用的bundleid為com.umeng.pushtestdemo 而且也已經創(chuàng)建了他的兩種環(huán)境的描述文件准谚,所以我們這需要在創(chuàng)建第二個com.umeng.pushtestdemo.*? 創(chuàng)建他的兩種環(huán)境的描述文件
然后按著11.ios證書配置教程放到自己的工程里面挫剑,到此工程里面的證書配置就完成了。然后就是依賴庫的添加和代碼集成了
應用配置
提示
請先在【友盟+】消息推送管理后臺中創(chuàng)建App柱衔,獲得AppKey和AppSecret
2.1.1? 導入SDK
所需SDK文件夾:UMessage_Sdk_x.x.x
請在你的工程目錄結構中樊破,右鍵選擇Add->Existing Files…,選擇這個文件夾唆铐≌芷荩或者將這個文件夾拖入XCode工程目錄結構中,在彈出的界面中勾選Copy items into destination group's folder(if needed), 并確保Add To Targets勾選相應的target艾岂。
2.1.2? 引入庫文件
增加UserNotifications.framework到項目中顺少。
具體操作如下:點擊項目---->TARGET---->Build Phases---->Link Binary with Libraries ---->左側+號---->搜索UserNotifications---->選中UserNotifications.framework---->點擊Add
2.1.3? 配置(可選)
SDK采用ARC管理內存,非ARC項目也是默認支持,如遇問題脆炎,請聯(lián)系我們
如果您使用了-all_load梅猿,可能需要添加libz的庫:
TARGETS-->Build Phases-->Link Binary With Libraries--> + -->libz.dylib
2.1.4? 打開推送開關
點擊項目---->TARGET---->Capabilities,將這里的Push Notification的開關打開腕窥,效果如圖所示
注意:一定要打開Push Notification,且兩個steps都是正確的粒没,否則會報如下錯誤:Code=3000 "未找到應用程序的“aps-environment”的授權字符串"
2.2? 集成推送
打開*AppDelegate.m
2.2.1? 引入頭文件
引入UMessage.h,UserNotifications.h
2.2.2? 設置代理
設置UNUserNotificationCenterDelegate
2.2.3完整的初始化代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//友盟推送適配Https
[UMessage startWithAppkey:@"5923e1257f2c7455780001cb" launchOptions:launchOptions httpsEnable:YES];
[UMessage openDebugMode:YES];
[UMessage addLaunchMessageWithWindow:self.window finishViewController:[[TabBarController alloc]init]];
[UMessage registerForRemoteNotifications];
//iOS10必須加下面這段代碼。
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate=self;
UNAuthorizationOptions types10=UNAuthorizationOptionBadge|UNAuthorizationOptionAlert|UNAuthorizationOptionSound;
[center requestAuthorizationWithOptions:types10 completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
//點擊允許
} else {
//點擊不允許
}
}];
//打開日志簇爆,方便調試
[UMessage setLogEnabled:YES];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// 注冊devicetoken,并把nslog打印出來的devicetoken放到友盟的后臺測試設備那
[UMessage registerDeviceToken:deviceToken];
NSLog(@"UmengDeviceToken-%@",[[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""]
stringByReplacingOccurrencesOfString: @">" withString: @""]
stringByReplacingOccurrencesOfString: @" " withString: @""]);
}
//iOS10以下使用這個方法接收通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
[UMessage didReceiveRemoteNotification:userInfo];
self.userInfo = userInfo;
//定制自定的的彈出框
if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"標題"
message:@"Test On ApplicationStateActive"
delegate:self
cancelButtonTitle:@"確定"
otherButtonTitles:nil];
[alertView show];
}
}
//iOS10新增:處理前臺收到通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//應用處于前臺時的遠程推送接受
//關閉U-Push自帶的彈出框
[UMessage setAutoAlert:NO];
//必須加這句代碼
[UMessage didReceiveRemoteNotification:userInfo];
}else{
//應用處于前臺時的本地推送接受
}
//當應用處于前臺時提示設置,需要哪個可以設置哪一個
completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);
}
//iOS10新增:處理后臺點擊通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//應用處于后臺時的遠程推送接受
//必須加這句代碼
[UMessage didReceiveRemoteNotification:userInfo];
}else{
//應用處于后臺時的本地推送接受
}
}
到此就可以實現(xiàn)簡單的推送了爽撒,但是這個時候點擊推送消息并不能真正跳到消息的詳情頁入蛆,這個我在下篇簡書中詳細講解,目前這個推送的集成是簡單版的硕勿,如果想有富文本推送請參考友盟的官網(wǎng)