前言
本文只针对个推所做的总结,其他推送大同小异
正文
1.添加Notification Service Extension
选择File
->New
->Target
->Notification Service Extension
选择Activate即可,如果没有弹出该选项框,需要自行添加相应的 scheme。
需要注意的点:
- Extension 的 Bundle Identifier 不能和 Main Target(也就是你自己的 App Target)的 Bundle Identifier 相同,否则会报 BundeID 重复的错误。
- Extension 的 Bundle Identifier 需要在 Main Target 的命名空间下,比如说 Main Target 的 BundleID 为 ent.getui.xxx,那么Extension的BundleID应该类似与ent.getui.xxx.yyy这样的格式。如果不这么做,会引起命名错误。
可以使用.NotificationService的格式
NotificationService的 Deployment Target要设置最低10.0
2.添加请求代码
之后项目中会多出一个文件夹NotificationService
,其中包括一对关键文件
NotificationService.h
和NotificationService.m
.m中会默认有两个方法
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// Modify the notification content here...
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
self.contentHandler(self.bestAttemptContent);
}
- (void)serviceExtensionTimeWillExpire {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
self.contentHandler(self.bestAttemptContent);
}
当多媒体消息到达客户端后会走第一个方法,可以在其中处理资源
但是如果处理时间过长,将会进入serviceExtensionTimeWillExpire
方法进行最后的紧急处理。
NotificationService文件夹中的info.plist要添加App Transport Security Settings字典类型,并增加BOOL类型的Allow Arbitrary Loads设置为YES