使用OneSignal推送通知:什么意思是“无推送令牌”?

我正在使用OneSignal进行推送通知。

在订阅列表中,一些设备/用户标记为No (No Push Token) 。 说明: This user has no push token and cannot be targeted.

这适用于iOS devices以及Android devices

这是什么意思? 为什么会这样? 怎么改呢?

这意味着OneSignal没有从设备获得pushToken,但设备能够注册您的OneSignal帐户。 在iOS上,pushToken被称为设备令牌,在Android上,这是Google注册ID。

根据您正在使用的OneSignal SDK,可以在调用OneSignal init以添加其他日志记录之前调用setLogLevel函数。 这将打印在iOS的Xcode日志或Android的adb logcat中。 还要确保您使用的是最新的OneSignal SDK。

您还可以在登录后通过页面底部的帮助气泡联系OneSignal,他们可以检查您的帐户以帮助诊断问题。

你能检查一下“推送通知”function是否已打开? 如果不是,请将其打开并查看是否有效,否则继续阅读。

确保您运行的是最新版本的OneSignal SDK( 2.1.14 ),因为此版本应该已经解决了该问题。 接下来,尝试以下修复:

修复1

从导航面板中,选择您的顶级蓝色项目。 然后选择目标并导航到“构建设置”。 搜索其他链接器标志并添加以下条目: -ObjC

做一个项目清理并再次运行,看它是否有效。

修复2

在您的桥接标题(如果有的话)或App Delegate可见的任何头文件中,为OneSignal类创建一个扩展,您可以在其中定义以下接口方法:

 + (void)didRegisterForRemoteNotifications:(UIApplication*)app deviceToken:(NSData*)inDeviceToken; 

接下来,覆盖应用委托中的didRegisterForRemoteNotifications委托方法,并在OneSignal上调用上述方法并将两个参数传递给SDK。

请注意,在XCode 8到2.1.10版本中使用时,OneSignal SDK存在一个相当严重的缺陷,当使用Cocoapods(推荐的方法)包含该软件包时,这些缺陷导致iOS设备No push token注册。 确保更新您的pod。

请参阅2.1.11的发行说明 :

修复了2.1.10中的“无推送令牌”问题,当OneSignal通过CocoaPods下载并包含其他使用-ObjC标志的pod时会发生这种问题。

确保您的Xcode项目启用了“推送通知”和“远程通知” 。

正如其他答案所述,CocoaPods设置中存在2.1.10的错误。 所以我改变了

 pod 'OneSignal' ## points to 2.1.10 

 pod 'OneSignal', :git => 'https://github.com/OneSignal/OneSignal-iOS-SDK.git', :branch => 'master'