iOS 點(diǎn)擊推送消息跳轉(zhuǎn)頁面

看標(biāo)題就應(yīng)該知道這次的主題是講點(diǎn)擊推送的消息跳轉(zhuǎn)頁面的功能,那么有關(guān)證書配置及完整的接入推送功能這里就不細(xì)說了,不懂的可以看這里

由于收到通知時(shí),APP可能處在不同的狀態(tài)(未啟動(dòng)、活躍、后臺(tái)運(yùn)行),而不同的狀態(tài)在點(diǎn)擊通知欄的通知時(shí)所調(diào)用的方法不同。
(1)未啟動(dòng)
未啟動(dòng)時(shí),點(diǎn)擊通知的回調(diào)方法是:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

而對(duì)應(yīng)的通知內(nèi)容則為

NSDictionary *pushNotificationKey = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

當(dāng)pushNotificationKey為nil時(shí),說明用戶是直接點(diǎn)擊APP進(jìn)入的,如果點(diǎn)擊的是通知欄,那么即為對(duì)應(yīng)的通知內(nèi)容。

(2)啟動(dòng)時(shí)(活躍、后臺(tái)運(yùn)行)
當(dāng)APP處在啟動(dòng)狀態(tài)時(shí),點(diǎn)擊通知欄的回調(diào)方法是:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;

其中userInfo就是對(duì)應(yīng)的通知內(nèi)容,與未啟動(dòng)時(shí)pushNotificationKey是相同的。

如果你的跳轉(zhuǎn)方法是用presentViewController,那么可以直接在AppDelegate中獲取當(dāng)前的根視圖,直接調(diào)用presentViewController方法進(jìn)行跳轉(zhuǎn)。如果你的跳轉(zhuǎn)方法需要用到push,那么你的根視圖必須包含有UINavigationController,否則將推不過去。

在我的項(xiàng)目上,我的根視圖是UITabBarController,我通過UITabBarController當(dāng)前選中的視圖控制器,判斷當(dāng)前選中的視圖控制器是否是UINavigationController,如果是就直接跳轉(zhuǎn)到需要的頁面。

我接收到通知后的代碼如下

- (void)receiveNotification:(NSDictionary *)userInfo {
    self.userInfo = userInfo;
    
    [XGPush handleReceiveNotification:userInfo
                      successCallback:^{
                          NSLog(@"信鴿收到推送成功");
                             
                       dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_MSEC)), dispatch_get_main_queue(), ^{
                              if ([self.startVC isKindOfClass:[MainTabBarViewController class]]) {
                                  MainTabBarViewController *mainTab = (MainTabBarViewController *)self.startVC;
                                  if ([mainTab.selectedViewController isKindOfClass:[UINavigationController class]]) {
                                      
                                      UINavigationController *nav = (UINavigationController *)mainTab.selectedViewController;
                                      
                                      if ([nav.topViewController isKindOfClass:[UserProtoccolViewController class]]) {
                                          UserProtoccolViewController *protocolVC = (UserProtoccolViewController *)nav.topViewController;
                                          if (protocolVC.isMessageDetail == YES) {
                                              return;
                                          }
                                      }
                                      UIStoryboard *LoginStoryBoard = [UIStoryboard storyboardWithName:@"Login" bundle:nil];
                                      UserProtoccolViewController *protoccolVC =  [LoginStoryBoard instantiateViewControllerWithIdentifier:@"UserProtoccol"];
                                      protoccolVC.titleStr = self.userInfo[@"title"];
                                      protoccolVC.url = self.userInfo[@"detailUrl"];
                                      protoccolVC.isMessageDetail = YES;
                                      [nav pushViewController:protoccolVC animated:YES];
                                  }
                              }
                              
                          });
                          
                      } errorCallback:^{
                          NSLog(@"信鴿收到推送失敗");
                      }];

}

這個(gè)方法中參數(shù)userInfo就是前面說到的通知內(nèi)容,startVC是根視圖。userInfo中的鍵值對(duì)未必和我這里的列子一樣,這個(gè)可以讓后臺(tái)傳你需要的參數(shù)。

這樣,點(diǎn)擊推送消息跳轉(zhuǎn)頁面功能就完成啦!不過我這里還需要在啰嗦一句,就是后臺(tái)做推送的時(shí)候一定要注意證書的選擇,從App Store上下載下來的一定要用生產(chǎn)證書,其他時(shí)候(如真機(jī)調(diào)試)要用開發(fā)證書,否則將收不到推送。還有一個(gè)問題,我也是今天才發(fā)現(xiàn)的,就是從App Store上下載的和真機(jī)調(diào)試的雖然用的是同一部手機(jī),但是token是不一樣的,在調(diào)試的時(shí)候也需要注意一下。

有什么說的不對(duì)的地方歡迎大家指正~

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

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,869評(píng)論 10 16
  • 推送通知 注意:這里說的推送通知跟NSNotification有所區(qū)別 NSNotification是抽象的,不可...
    iOS開發(fā)攻城獅閱讀 4,415評(píng)論 1 13
  • 概述 在多數(shù)移動(dòng)應(yīng)用中任何時(shí)候都只能有一個(gè)應(yīng)用程序處于活躍狀態(tài),如果其他應(yīng)用此刻發(fā)生了一些用戶感興趣的那么通過通知...
    莫離_焱閱讀 6,708評(píng)論 1 8
  • 參加《思考,快與慢》共讀活動(dòng)前,我一直覺得自己是一個(gè)主動(dòng)的人。主動(dòng)去買書閱讀,主動(dòng)去做工作,主動(dòng)去鍛煉身體...
    叮當(dāng)_蘭閱讀 426評(píng)論 1 0

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