版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
为了实现通知打开监听,您需要在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
来处理通知的展示与交互。以上步骤和代码示例覆盖了通知打开监听的主要场景,请根据您的具体需求进行调整和实施。