這篇友盟的想寫了很久了娇未,實屬友盟文檔寫的有點難懂墨缘。最近看群里好多人用了友盟,有不同的問題存在零抬。今天镊讼,我將我集成UPush的過程,以及遇到的一些小問題寫一下平夜。
首先蝶棋,(集成之前, 請在push.umeng.com/申請開通【友盟+】消息推送服務(wù))下載SDK褥芒,我是手動添加的嚼松,傳送門:SDK下載(如果需要插屏等功能需要下載U-Push iOS v1.5.0a,注意無IDFA版本)
1.導(dǎo)入SDK,引入庫文件增加UserNotifications.framework到項目中锰扶。具體操作如下:點擊項目---->TARGET---->Build Phases---->Link Binary with Libraries---->左側(cè)+號---->搜索UserNotifications---->選中UserNotifications.framework---->點擊Add献酗。?
點擊項目---->TARGET---->Capabilities,將這里的Push Notification的開關(guān)打開(有些可能遇到Code=3000 "未找到應(yīng)用程序的“aps-environment”的授權(quán)字符串坷牛,這時候要檢查App ID是否開啟了推送服務(wù)罕偎,并保證推送證書有效,檢查PP(配置)文件)
2.開始集成京闰,會有部分代碼
打開AppDelegate.m ?引入頭文件 引入UMessage.h,UserNotifications.h 設(shè)置代理
設(shè)置UNUserNotificationCenterDelegate? 如果需要適配HTTPs加上一句代碼 [UMessage startWithAppkey:@"your appkey" launchOptions:launchOptions httpsenable:YES ];
didFinishLaunchingWithOptions 中初始化
[UMessage startWithAppkey:@"your appkey"launchOptions:launchOptions];
[UMessage registerForRemoteNotifications];
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate=self;颜及、UNAuthorizationOptions types10=UNAuthorizationOptionBadge|? UNAuthorizationOptionAlert|UNAuthorizationOptionSound;
[center requestAuthorizationWithOptions:types10? ? completionHandler:^(BOOLgranted,NSError* _Nullable error) {if(granted)
?{//點擊允許//這里可以添加一些自己的邏輯
}else{//點擊不允許//這里可以添加一些自己的邏輯}
}];
//打開日志,方便調(diào)試蹂楣。[UMessage setLogEnabled:YES];
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
//注冊deviceToken俏站,現(xiàn)在不用手動注冊,但測試模式下要將deviceToken添加到Umeng后臺的測試設(shè)備中 [UMessage registerDeviceToken:deviceToken];
}
接受通知痊土。 //關(guān)閉U-Push自帶的彈出框[UMessage setAutoAlert:NO];
[UMessage didReceiveRemoteNotification:userInfo]; //統(tǒng)計點擊次數(shù)
//iOS10以下使用這個方法接收通知- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{[UMessage didReceiveRemoteNotification:userInfo];}
//iOS10新增:處理后臺點擊通知的代理方法-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{
NSDictionary* userInfo = response.notification.request.content.userInfo;
if([response.notification.request.triggerisKindOfClass:[UNPushNotificationTrigger class]]) {
//應(yīng)用處于后臺時的遠(yuǎn)程推送接受//必須加這句代碼
[UMessage didReceiveRemoteNotification:userInfo];
}else{
//應(yīng)用處于后臺時的本地推送接受}
}
//iOS10新增:處理前臺收到通知的代理方法-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void(^)(UNNotificationPresentationOptions))completionHandler{
NSDictionary* userInfo = notification.request.content.userInfo;
if([notification.request.triggerisKindOfClass:[UNPushNotificationTrigger class]])?
{//應(yīng)用處于前臺時的遠(yuǎn)程推送接受//關(guān)閉U-Push自帶的彈出框[UMessage setAutoAlert:NO];//必須加這句代碼[UMessage didReceiveRemoteNotification:userInfo];
}else{//應(yīng)用處于前臺時的本地推送接受}//當(dāng)應(yīng)用處于前臺時提示設(shè)置肄扎,需要哪個可以設(shè)置哪一個completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);//聲音角標(biāo)提示}
如果需要調(diào)轉(zhuǎn)指定頁面 往下看
寫到這里可以進行測試了。如果測試沒有問題赁酝,來繼續(xù)寫一下犯祠,如果App處于被殺死狀態(tài),點擊通知酌呆,跳轉(zhuǎn)到指定頁面衡载,因為我們做的是跳轉(zhuǎn)到webview所以我根據(jù)是否含有url來判斷,如果是要跳到不同的指定頁面隙袁,需要對參數(shù)進行判斷
didFinishLaunchingWithOptions? 這個方法痰娱,Apple的官方文檔//Tells the delegate when the application has launched and may have additional launch options to handle. 可能有額外的啟動選項來處理弃榨。
在這里我們來看一下推送的userinfo
// 如果 launchOptions 不為空,我采用的是將推送中需要跳轉(zhuǎn)的url存入沙盒內(nèi)猜揪。
if (launchOptions) {
// 獲取推送通知定義的userinfo
NSDictionary *userInfo = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
NSUserDefaults *DYG = [NSUserDefaults standardUserDefaults];
[DYG setObject:userInfo[@"url"] forKey:@"dygPushUrl1"];
[DYG synchronize];
}
在程序進入后如果沙盒內(nèi)存在這個url惭墓,那么跳轉(zhuǎn)到加載web頁面。也可以將這個web頁面設(shè)置成rootviewcontroller而姐,應(yīng)該好多種方法吧。
當(dāng)程序處于運行狀態(tài)划咐,接受到通知拴念,這里運行包括前后臺
- (void)handlerTuisong:(NSDictionary *)userInfo{
UINavigationController *contoller = nil;
if (![[userInfo allKeys] containsObject:@"url"]) {
NSLog(@"沒有推送要求");
}else{
if (self.tabBarViewController) {
contoller = (UINavigationController *)self.tabBarViewController.selectedViewController;
} else {
UIViewController * DygVC = self.window.rootViewController;
if ([DygVC isKindOfClass:[UINavigationController class]]) {
UINavigationController * DygNav = (UINavigationController *)self.window.rootViewController;
contoller = DygNav;
}
}
DygWkWebView *DygWebView = [[DygWkWebView alloc]init];
DygWebView.url = userInfo[@"url"];
DygWebView.hidesBottomBarWhenPushed = YES;
[contoller pushViewController:DygWebView animated:YES];
}
}
好了,完工褐缠!
再加入一個小小的插屏功能政鼠,有廣告效果,又可以在更好的位置讓用戶看到队魏,既顯示出你的細(xì)心公般,又讓產(chǎn)品 (汪!)樂呵呵~
注意使用的SDK版本要是帶.a的胡桨,我第一次搞官帘,選錯了版本,找不到文檔上的方法昧谊,給Umeng發(fā)郵件臭罵了一頓結(jié)果是我自己的SDK版本不對(我又發(fā)了致歉郵件,錯了就改改了再犯千錘百煉嘛~)刽虹。
[UMessage addCardMessageWithLable:@"這里寫標(biāo)識"]; 記得要在指定頁面寫好標(biāo)識符,可以用漢字呢诬,但是不要亂寫涌哲,只有10個位置!
暫時功能是做了這些尚镰,如果有什么疑問阀圾,可以加QQ交流。745377439 問題答案:不是狗唉。QQ群:139852091 ?