友盟推送---小白都能看的懂的教程(二)

上篇簡書寫了在進行推送時的前期的準備,這次就從集成代碼開始寫了

iOS10中因為增加了通知的擴展,所以對于擴展部分也需要一個APP id,并且這個id要和項目前綴類似。和以前的區別是,這個項目用了兩個APP ID,4個Provisioning Profile文件(兩個開發環境,兩個生產環境)。以bundle id為com.umeng.umpmessage的項目為例:

請按著11.ios證書配置教程配置,他這個是以bundle id為com.umeng.umpmessage創建一個開發的描述文件,上傳商店的描述文件,然后在以bundle id為com.umeng.umpmessage.* ? ? 創建一個開發的描述文件,上傳商店的描述文件,這就他所說的iOS10中因為增加了通知的擴展,所以對于擴展部分也需要一個APP id,并且這個id要和項目前綴類似。和以前的區別是,這個項目用了兩個APP ID,4個Provisioning Profile文件。?

在上一篇教程中我們所用的bundleid為com.umeng.pushtestdemo 而且也已經創建了他的兩種環境的描述文件,所以我們這需要在創建第二個com.umeng.pushtestdemo.*? 創建他的兩種環境的描述文件

然后按著11.ios證書配置教程放到自己的工程里面,到此工程里面的證書配置就完成了。然后就是依賴庫的添加和代碼集成了

應用配置

提示

請先在【友盟+】消息推送管理后臺中創建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項目也是默認支持,如遇問題,請聯系我們

如果您使用了-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{

//應用處于后臺時的本地推送接受

}

}


到此就可以實現簡單的推送了,但是這個時候點擊推送消息并不能真正跳到消息的詳情頁,這個我在下篇簡書中詳細講解,目前這個推送的集成是簡單版的,如果想有富文本推送請參考友盟的官網

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容