版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
为了实现通知打开监听,您需要在iOS应用的代理方法中处理不同场景下通知的接收与响应。以下是根据您的需求整理的操作步骤和示例代码:
当App从关闭状态通过点击通知启动时,您应在application:didFinishLaunchingWithOptions:方法内上报通知打开回执。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 点击通知将App从关闭状态启动时,上报通知打开回执
    [[CloudPushSDK sendNotificationAck:launchOptions]];
    return YES;
}
userNotificationCenter:willPresentNotification:withCompletionHandler:方法内处理通知展示逻辑。- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
    completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge);
}
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]];
}
在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();
}
sendNotificationAck:方法用于上报通知被用户打开的状态,是统计推送效果的关键。UNUserNotificationCenter来处理通知的展示与交互。以上步骤和代码示例覆盖了通知打开监听的主要场景,请根据您的具体需求进行调整和实施。