开发者社区 问答 正文

移动推送+ReactNative最佳实践方法有哪些?(4)

  • 通知打开监听;
  1. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]BOOL[backcolor=transparent])[backcolor=transparent]application[backcolor=transparent]:([backcolor=transparent]UIApplication[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]application didFinishLaunchingWithOptions[backcolor=transparent]:([backcolor=transparent]NSDictionary[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]launchOptions [backcolor=transparent]{
  2. [backcolor=transparent]     [backcolor=transparent]// 点击通知将App从关闭状态启动时,将通知打开回执上报
  3. [backcolor=transparent]     [backcolor=transparent]// [CloudPushSDK handleLaunching:launchOptions];(Deprecated from v1.8.1)
  4. [backcolor=transparent]     [backcolor=transparent][[backcolor=transparent]CloudPushSDK[backcolor=transparent] sendNotificationAck[backcolor=transparent]:[backcolor=transparent]launchOptions[backcolor=transparent]];
  5. [backcolor=transparent]     [backcolor=transparent]return[backcolor=transparent] YES[backcolor=transparent];
  6. [backcolor=transparent]}
  7. [backcolor=transparent]/*
  8. [backcolor=transparent] * App处于启动状态时,通知打开回调
  9. [backcolor=transparent] */
  10. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]void[backcolor=transparent])[backcolor=transparent]application[backcolor=transparent]:([backcolor=transparent]UIApplication[backcolor=transparent]*)[backcolor=transparent]application didReceiveRemoteNotification[backcolor=transparent]:([backcolor=transparent]NSDictionary[backcolor=transparent]*)[backcolor=transparent]userInfo [backcolor=transparent]{
  11. [backcolor=transparent]     [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"Receive one notification."[backcolor=transparent]);
  12. [backcolor=transparent]     [backcolor=transparent]// 取得APNS通知内容
  13. [backcolor=transparent]     [backcolor=transparent]NSDictionary[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]aps [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]userInfo valueForKey[backcolor=transparent]:@[backcolor=transparent]"aps"[backcolor=transparent]];
  14. [backcolor=transparent]     [backcolor=transparent]// 内容
  15. [backcolor=transparent]     [backcolor=transparent]NSString[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]content [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]aps valueForKey[backcolor=transparent]:@[backcolor=transparent]"alert"[backcolor=transparent]];
  16. [backcolor=transparent]     [backcolor=transparent]// badge数量
  17. [backcolor=transparent]     [backcolor=transparent]NSInteger[backcolor=transparent] badge [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[[backcolor=transparent]aps valueForKey[backcolor=transparent]:@[backcolor=transparent]"badge"[backcolor=transparent]][backcolor=transparent] integerValue[backcolor=transparent]];
  18. [backcolor=transparent]     [backcolor=transparent]// 播放声音
  19. [backcolor=transparent]     [backcolor=transparent]NSString[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]sound [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]aps valueForKey[backcolor=transparent]:@[backcolor=transparent]"sound"[backcolor=transparent]];
  20. [backcolor=transparent]     [backcolor=transparent]// 取得Extras字段内容
  21. [backcolor=transparent]     [backcolor=transparent]NSString[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]Extras[backcolor=transparent] [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]userInfo valueForKey[backcolor=transparent]:@[backcolor=transparent]"Extras"[backcolor=transparent]];[backcolor=transparent] [backcolor=transparent]//服务端中Extras字段,key是自己定义的
  22. [backcolor=transparent]     [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"content = [%@], badge = [%ld], sound = [%@], Extras = [%@]"[backcolor=transparent],[backcolor=transparent] content[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]long[backcolor=transparent])[backcolor=transparent]badge[backcolor=transparent],[backcolor=transparent] sound[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Extras[backcolor=transparent]);
  23. [backcolor=transparent]     [backcolor=transparent]// iOS badge 清0
  24. [backcolor=transparent]     application[backcolor=transparent].[backcolor=transparent]applicationIconBadgeNumber [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]0[backcolor=transparent];
  25. [backcolor=transparent]     [backcolor=transparent]// 通知打开回执上报
  26. [backcolor=transparent]     [backcolor=transparent]// [CloudPushSDK handleReceiveRemoteNotification:userInfo];(Deprecated from v1.8.1)
  27. [backcolor=transparent]     [backcolor=transparent][[backcolor=transparent]CloudPushSDK[backcolor=transparent] sendNotificationAck[backcolor=transparent]:[backcolor=transparent]userInfo[backcolor=transparent]];
  28. [backcolor=transparent]}

展开
收起
猫饭先生 2017-10-23 11:18:40 1324 分享 版权
阿里云 AI 助理回答

为了实现通知打开监听,您需要在iOS应用的代理方法中处理不同场景下通知的接收与响应。以下是根据您的需求整理的操作步骤和示例代码:

1. App启动时处理远程通知

当App从关闭状态通过点击通知启动时,您应在application:didFinishLaunchingWithOptions:方法内上报通知打开回执。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 点击通知将App从关闭状态启动时,上报通知打开回执
    [[CloudPushSDK sendNotificationAck:launchOptions]];
    return YES;
}

2. App处于前台或后台时接收到通知

  • 前台接收通知:在userNotificationCenter:willPresentNotification:withCompletionHandler:方法内处理通知展示逻辑。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
    completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge);
}
  • 后台或锁屏状态下点击通知进入App:在application:didReceiveRemoteNotification:方法内处理通知内容并上报通知打开回执。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    // 取得通知内容、badge数量、声音等信息
    NSDictionary *aps = userInfo[@"aps"];
    NSString *content = aps[@"alert"];
    NSInteger badge = [aps[@"badge"] integerValue];
    NSString *sound = aps[@"sound"];
    NSString *extras = userInfo[@"Extras"];
    
    NSLog(@"content = %@, badge = %ld, sound = %@, Extras = %@", content, (long)badge, sound, extras);
    
    // 清除应用图标角标
    application.applicationIconBadgeNumber = 0;
    
    // 上报通知打开回执
    [[CloudPushSDK sendNotificationAck:userInfo]];
}

3. 用户触发通知动作(如点击、删除通知)

userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:方法内处理用户对通知的各种操作,包括点击打开、删除通知及自定义Action。

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
    if ([response.actionIdentifier isEqualToString:UNNotificationDefaultActionIdentifier]) {
        NSLog(@"User opened the notification.");
        // 处理通知内容并上报打开回执
        [self handleiOS10Notification:response.notification.request.content.userInfo];
    } else if ([response.actionIdentifier isEqualToString:UNNotificationDismissActionIdentifier]) {
        NSLog(@"User dismissed the notification.");
    } else {
        // 处理自定义Action
    }
    completionHandler();
}

注意事项

  • 确保已正确集成阿里云移动推送iOS SDK,并完成设备注册。
  • sendNotificationAck:方法用于上报通知被用户打开的状态,是统计推送效果的关键。
  • 自iOS 10起,需要使用UNUserNotificationCenter来处理通知的展示与交互。
  • 请根据实际需求调整通知展示逻辑,如是否弹出通知、播放声音等。

以上步骤和代码示例覆盖了通知打开监听的主要场景,请根据您的具体需求进行调整和实施。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答