错误信息:
Dyld Error Message:
Dyld Message: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications
解决:Target > Build Phases > Link Binary With Libraries
将 UserNotifications.framework
设置成 Optional
或者使用低版本打包。
在 Xcode 开发环境下安装 App,并使用移动推送推送开发环境的消息时,出现以下两种错误提示:
Missing Provisioning Profile - iOS Apps must contain a provisioning profile named embedded.mobileprovision.
缺少配置文件-iOS应用程序必须包含名为embedded.mobileprovision的配置文件。
错误原因:App 包缺少配置文件 embedded.mobileprovision,导致 token 环境未知。
出现此问题时,可按以下步骤解决:
需要找到扩展插件 target,选择Build Settings>Excluded Architectures,添加 arm64 指令集,如下图所示:
将推送证书 p12 文件转换成 pem 文件,并按以下步骤排查:
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
openssl x509 -in apns-dev-cert.pem -inform pem -noout -text
在调用 Rest API 推送时 content
字段不能设置空,否则将导致在 iOS 10系统及以下的设备上无法弹出通知。
p8 证书存在安全隐患。虽然 p8 比 p12 有更长的有效期,但是同时也有更大的推送权限和范围。若泄露,可能会造成更加严重的影响。首先移动推送推荐您使用 p12 来分别管理您的应用的推送服务,如果您一定要使用 p8 证书可按以下步骤申请:
消息推送是一个涉及到很多关联模块协作的任务,每一个环节出现异常都可能会导致消息收不到,建议使用 工具箱 进行排查。以下是最为常见的问题:
客户端排查
即使是客户端正确获取 Token,且已经将 Token 注册到移动推送后台,当使用移动推送服务器推送下发消息成功时,如果是设备未联网的状态,客户端将无法收到消息。若设备在短时内恢复网络连接,可能还会收到消息(APNs 会持有一段时间,然后再次下发消息)。
SDK 接入问题,在接入 SDK 之后,请确保能够获取到接收消息的标识(Device Token),具体请参见 iOS SDK 集成指南。
服务器排查
推送证书排查
移动推送服务器在向 APNs 请求消息下发的时候,需要使用两个必需的参数:消息推送证书和设备标识(Device Token),在进行消息推送的时候,请确保消息推送证书是有效的。关于消息推送证书的设置请参见 iOS 推送证书获取指引。
请检查 Xcode 工程中配置的 bundle id 是否和设置的 Provision Profile 文件匹配,且对应 App 的 Provision Profile 文件是否已配置了消息推送能力。
首先,终端开发侧,需将音频文件放到 bundle 目录下:
支持,以下场景适用下发通知消息时设备处于离线(关机、飞行模式、网络异常导致的长链接断开)状态:
请给参数 content-available 赋值1,同时不使用 alert、badge、sound。
此问题现象是由于 APNs 服务不稳定导致的,可尝试通过以下方式解决:
可使用 API 在创建推送时使用通知栏消息类型,且标题内容设为空,同时只设置 badge_type 即可,详情可参考 API 文档说明。
示例如下:
{
"platform": "ios",
"audience_type": "token",
"environment":"dev",
"token_list": [
"05a8ea6924590dd3a94480fa1c9fc8448b4e"],
"message_type":"notify",
"message":{
"ios":{
"aps": {
"badge_type":-2
}
}
}
}
如果您的 App 集成了移动推送iOS SDK(1.2.7.2 - 1.2.5.4),且使用到移动推送的撤回功能,同时 App 侧实现了如下系统回调:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
则可能会遇到此问题。您可以使用覆盖功能来实现已发送消息的处理。
问题描述:
Xcode 调试提示“Error Domain=NSCocoaErrorDomain Code=1001 "APNS请求token失败-->请依次按以下方法解决:优先使用4G网络并重启手机,若多次重启仍然不行,建议更换手机测试!" UserInfo={NSLocalizedDescription=APNS请求token失败-->请依次按以下方法解决:优先使用4G网络并重启手机,若多次重启仍然不行,建议更换手机测试!“,按照提示操作后问题还是存在。
排查思路:
排查思路:
APNs 通道下发:
自建通道下发:
本页内容是否解决了您的问题?