iOS友盟推送跳轉(zhuǎn)指定頁面詳細篇

這篇友盟的想寫了很久了,實屬友盟文檔寫的有點難懂。最近看群里好多人用了友盟,有不同的問題存在。今天,我將我集成UPush的過程,以及遇到的一些小問題寫一下。

首先,(集成之前, 請在push.umeng.com/申請開通【友盟+】消息推送服務(wù))下載SDK,我是手動添加的,傳送門:SDK下載(如果需要插屏等功能需要下載U-Push iOS v1.5.0a,注意無IDFA版本)

1.導入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)用處于后臺時的遠程推送接受//必須加這句代碼

[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)用處于前臺時的遠程推送接受//關(guān)閉U-Push自帶的彈出框[UMessage setAutoAlert:NO];//必須加這句代碼[UMessage didReceiveRemoteNotification:userInfo];

}else{//應(yīng)用處于前臺時的本地推送接受}//當應(yīng)用處于前臺時提示設(shè)置,需要哪個可以設(shè)置哪一個completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);//聲音角標提示}

如果需要調(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)該好多種方法吧。

當程序處于運行狀態(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];

}

}

好了,完工!

再加入一個小小的插屏功能,有廣告效果,又可以在更好的位置讓用戶看到,既顯示出你的細心,又讓產(chǎn)品 (汪!)樂呵呵~

注意使用的SDK版本要是帶.a的,我第一次搞,選錯了版本,找不到文檔上的方法,給Umeng發(fā)郵件臭罵了一頓結(jié)果是我自己的SDK版本不對(我又發(fā)了致歉郵件,錯了就改改了再犯千錘百煉嘛~)。

[UMessage addCardMessageWithLable:@"這里寫標識"]; 記得要在指定頁面寫好標識符,可以用漢字,但是不要亂寫,只有10個位置!

暫時功能是做了這些,如果有什么疑問,可以加QQ交流。745377439 問題答案:不是。QQ群:139852091 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容