OneSignal iOS SDK 发送通知失败 Code 400
OneSignal iOS SDK send notification fail Code 400
我做了什么:
我创建了一个简单的 iOS 本机应用程序,它只有 OneSignal 初始化代码。我在我的 2 台设备(设备 A 和设备 B)上安装了我的应用程序。这两个设备都订阅了我的 OneSignal 应用程序控制台。当我从 OneSignal Web 控制台发送通知时,2 台设备都可以收到通知。
我想做的事情:
当我点击设备A上的按钮时,设备A会向设备B发送通知。
问题是什么:
我按照 OneSignal iOS SDK 文档创建了以下函数
https://documentation.onesignal.com/docs/ios-native-sdk#section-sending-notifications
func onButtonClick() {
OneSignal.postNotification(
[
"contents": ["en": "Test Message"],
"include_player_ids": ["c00bb8a6-79da-419b-9999-e919831a5223"] // id of device B
],
onSuccess: {(result) in print("success") },
onFailure: {(error) in print("error : \(error)") }
)
}
但是,当我单击该按钮时,xCode 调试控制台中出现错误:
2017-01-20 11:15:52.702852 my.bundle.id[2263:1201122] ERROR: Create notification failed
error : Optional(Error Domain=OneSignalError Code=400 "(null)" UserInfo={returned={
errors = (
"Please include a case-sensitive header of Authorization: Basic <YOUR-REST-API-KEY-HERE> with a valid REST API key."
);
reference = (
"https://documentation.onesignal.com/docs/accounts-and-keys#section-keys-ids"
);
}})
我很困惑,因为根据 OneSignal 参考文档,使用 "include_player_ids" 发送通知 不需要 API 授权密钥。
https://documentation.onesignal.com/reference#create-notification
它还说:永远不要在客户端代码中使用您的 'REST API key',它只能在您的系统或服务器上使用。
那么这个错误是什么意思呢?我该怎么办?
我什至从 复制并 运行 这个 "work without any problems" 代码,但仍然出现相同的授权错误。我做错了什么?
答案
只要升级SDK,问题就解决了。
这是 OneSignal-iOS-SDK 2.3.1
中的错误,此错误已在 2.3.2
中修复。
请看他们的 Github Release Notes.
如何避免此类问题
在pod install
之前总是运行pod repo update
以确保pod安装最新版本的框架。
感谢来自 One Signal Conversations 的 Kevin、Jason 和 Josh 帮助我解决了这个问题。
我做了什么:
我创建了一个简单的 iOS 本机应用程序,它只有 OneSignal 初始化代码。我在我的 2 台设备(设备 A 和设备 B)上安装了我的应用程序。这两个设备都订阅了我的 OneSignal 应用程序控制台。当我从 OneSignal Web 控制台发送通知时,2 台设备都可以收到通知。
我想做的事情:
当我点击设备A上的按钮时,设备A会向设备B发送通知。
问题是什么:
我按照 OneSignal iOS SDK 文档创建了以下函数 https://documentation.onesignal.com/docs/ios-native-sdk#section-sending-notifications
func onButtonClick() {
OneSignal.postNotification(
[
"contents": ["en": "Test Message"],
"include_player_ids": ["c00bb8a6-79da-419b-9999-e919831a5223"] // id of device B
],
onSuccess: {(result) in print("success") },
onFailure: {(error) in print("error : \(error)") }
)
}
但是,当我单击该按钮时,xCode 调试控制台中出现错误:
2017-01-20 11:15:52.702852 my.bundle.id[2263:1201122] ERROR: Create notification failed
error : Optional(Error Domain=OneSignalError Code=400 "(null)" UserInfo={returned={
errors = (
"Please include a case-sensitive header of Authorization: Basic <YOUR-REST-API-KEY-HERE> with a valid REST API key."
);
reference = (
"https://documentation.onesignal.com/docs/accounts-and-keys#section-keys-ids"
);
}})
我很困惑,因为根据 OneSignal 参考文档,使用 "include_player_ids" 发送通知 不需要 API 授权密钥。
https://documentation.onesignal.com/reference#create-notification
它还说:永远不要在客户端代码中使用您的 'REST API key',它只能在您的系统或服务器上使用。
那么这个错误是什么意思呢?我该怎么办?
我什至从
答案
只要升级SDK,问题就解决了。
这是 OneSignal-iOS-SDK 2.3.1
中的错误,此错误已在 2.3.2
中修复。
请看他们的 Github Release Notes.
如何避免此类问题
在pod install
之前总是运行pod repo update
以确保pod安装最新版本的框架。
感谢来自 One Signal Conversations 的 Kevin、Jason 和 Josh 帮助我解决了这个问题。