苹果 iOS推送 APNS(本人亲测总结)
苹果 iOS 推送 apns
·
文章目录
1.静默推送(发透传消息)总是收不到(iOS静默通知(iOS Silent Notification):需要进一步验证
- 用极光测试,极光有静默推送的开关,静默推送也总是收不到
- 用下面的消息模板可以收到,但是只有app在前台的时候可以收到,APP在后台的时候收不到
// B. This works
{
aps: {
content-available: 1,
sound:“default”
}
}
参考博客:
iOS 7中的静默推送通知不起作用
2.推送的相关方法
这篇博客比较全:iOS普通推送以及静默推送奇怪的注意事项 - 简书
- 下面两个方法会被调用,上面静默推送模板发的消息也是app在前台时,在方法一中收到
// App在前台时收到普通推送 方法一
- (void)userNotificationCenter:(UNUserNotificationCenter*)center willPresentNotification:(UNNotification*)notification withCompletionHandler:(void(^)(UNNotificationPresentationOptions))completionHandler {
NSDictionary* userInfo = notification.request.content.userInfo;
NSLog(@"前台收到普通推送: %@", userInfo);
}
// App在后台时点击普通推送栏 方法二
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler {
NSDictionary* userInfo = response.notification.request.content.userInfo;
NSLog(@"后台收到普通推送: %@", userInfo);
completionHandler();
}
- 下面所谓静默推送的方法,我还没有在后台收到过静默推送的方法(iOS15,xcode 13)
// App在任何状态下收到静默推送
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"收到静默推送: %@", userInfo);
- 如果不设置delegate,普通推送也会走didReceiveRemoteNotification(本人亲测,这句话是正确的)
// ⚠️注意: 如果不设置delegate,普通推送也会走didReceiveRemoteNotification
[[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
3.模拟推送的工具
3.1 在appstore上搜一个app
- 在appstore上搜了一个,要勾上Sandbox才可以推送成功(本人亲测有效)
- 第一个APSs-Tool,本人测试,没有推送成功过
3.2 用极光推送
4.推送报错
4.1 BadDeviceToken
debug环境下是向开发环境的APNs服务器申请DeviceToken,而release环境是向生产环境的APNs服务器申请的。如果环境不匹配,则会出现Bad deviceToken错误
如果我把token删除最后面的一个字符,会报BadDeviceToken
4.2 DeviceTokenNotForTopic(TopicDisallowed)
- bundle id不对,会报下面的错误
4.3 MissingProviderToken
这个我弄了半天,后面发现我给到后台的是开发证书,而不是push推送证书
4.4 参考博客
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献10条内容
所有评论(0)