iOS 點擊推送跳轉(zhuǎn)詳情頁

系統(tǒng) API :iOS < 77 <= iOS < 10、 iOS >= 10
app 狀態(tài):后臺運行、 前臺運行、 未啟動

iOS 6 及以前接收到遠程推送的代理

- application: didReceiveRemoteNotification;

- application: didReceiveRemoteNotification 官方文檔
If the app is running, the app calls this method to process incoming remote notifications. If the app is not running when a remote notification arrives, the method launches the app and provides the appropriate information in the launch options dictionary. The app does not call this method to handle that remote notification.
Instead, your implementation of the application:willFinishLaunchingWithOptions:
or application:didFinishLaunchingWithOptions: method needs to get the remote notification payload data and respond appropriately.

如果應(yīng)用程序正在運行,應(yīng)用程序調(diào)用這個方法來處理傳入的遠程通知。
如果應(yīng)用程序在遠程通知到達時沒有運行,該方法會啟動應(yīng)用程序,并提供啟動信息。應(yīng)用程序不會調(diào)用這個方法來處理遠程通知。這時你可以通過application:didFinishLaunchingWithOptions:方法來獲得推送信息。
雖然是iOS 6之前的,但使用范圍是NS_DEPRECATED_IOS(3_0, 10_0)。只是iOS 7之后有了更好的選擇,所以這個就顯得有點雞肋了。如果要適配iOS 6及以前還需實現(xiàn)這個

iOS 7(包含) 到 iOS 10(不包含)新增代理。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    NSLog(@"[XGDemo] receive slient Notification");
    NSLog(@"[XGDemo] userinfo %@", userInfo);
    if (application.applicationState == UIApplicationStateActive) {
        // 前臺處理
    }else {
        [self pushToVCWithNotificationInfo:userInfo];
    }
    completionHandler(UIBackgroundFetchResultNewData);
}

- application:didReceiveRemoteNotification:fetchCompletionHandler 官方文檔
?Use this method to process incoming remote notifications for your app. Unlike the application:didReceiveRemoteNotification:method, which is called only when your app is running in the foreground,the system calls this method when your app is running in the foreground or background.
?If your delegate implements both methods, the app object calls the application:didReceiveRemoteNotification:fetchCompletionHandler: method.

application:didReceiveRemoteNotification:只有當(dāng)應(yīng)用程序在前臺運行調(diào)用,而這個方法在前臺、后臺、未啟動都能調(diào)用。如果兩個代理方法都被實現(xiàn)了,系統(tǒng)將只調(diào)用application:didReceiveRemoteNotification:fetchCompletionHandler:

因為我們應(yīng)用只適配iOS 8及以上,所以我就沒有再實現(xiàn)- (void)application: didReceiveRemoteNotification ;畢竟有了更新的代理,更簡單不用單獨處理應(yīng)用未啟動的情況。當(dāng)然也可以使用- application: didReceiveRemoteNotification;

iOS 10及以上新增代理

首先要在application:didFinishLaunchingWithOptions中加入

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
#endif

然后實現(xiàn)代理

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler {
    NSLog(@"[XGDemo] click notification");
    //收到推送的請求
    UNNotificationRequest *request = response.notification.request;
    //收到推送的內(nèi)容
    UNNotificationContent *content = request.content;
    //收到用戶的基本信息
    NSDictionary *userInfo = content.userInfo;
    [self pushToVCWithNotificationInfo:userInfo];
    completionHandler();
}
- userNotificationCenter: willPresentNotification: withCompletionHandler;   // App 在前臺彈通知需要調(diào)用這個接口

跳轉(zhuǎn)詳情頁

- (void)jumpWithNotificationInfo:(NSDictionary *)info {
    // 如果為空就返回
    if (!info) {
        return;
    }
    // 獲取包含的信息
    NSString *type = info[@"type"];
    // 首先,到最外層
    UIViewController *topView;
    topView = [self topViewController]; // 當(dāng)前控制器
    [topView.navigationController popToRootViewControllerAnimated:NO]; // 跳到一級界面
    if ([type isEqualToString:@"commentpass"]) { // 足跡
        self.mainVC.selectedIndex = 0;  // 然后,選中第幾個模塊
        DiscoveryDetialViewController *VC = [[DiscoveryDetialViewController alloc] init];
        UINavigationController *nav = self.mainVC.childViewControllers[0];
        VC.hidesBottomBarWhenPushed = YES;
        [nav pushViewController:VC animated:YES];
    }
}
最后編輯于
?著作權(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)容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的閱讀 13,655評論 5 6
  • 背景: 應(yīng)用收到推送通知后,通過 application:didReceiveRemoteNotification...
    Hyony閱讀 6,544評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評論 19 139
  • 調(diào)試時發(fā)現(xiàn),iOS 處理推送通知的方式在 iOS 9 和 iOS 10 上面有所不同。接收消息推送有兩個代理方法:...
    zinder閱讀 213評論 0 1
  • 覆蓋索引 基礎(chǔ)解釋 查看方法 使用條件 優(yōu)點
    wwwxi閱讀 775評論 0 0

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