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 帮助我解决了这个问题。