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.推送报错

iOS推送APNs - 腾讯云开发者社区

4.1 BadDeviceToken

debug环境下是向开发环境的APNs服务器申请DeviceToken,而release环境是向生产环境的APNs服务器申请的。如果环境不匹配,则会出现Bad deviceToken错误

如果我把token删除最后面的一个字符,会报BadDeviceToken

请添加图片描述

4.2 DeviceTokenNotForTopic(TopicDisallowed)

  • bundle id不对,会报下面的错误
    请添加图片描述

4.3 MissingProviderToken

这个我弄了半天,后面发现我给到后台的是开发证书,而不是push推送证书

4.4 参考博客

苹果APNS push推送错误定位/错误码 - 简书

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐