我希望能够在 Android 上使用 Titanium 发送推送通知。但是,每当我尝试此操作时,都会出现后端错误,我认为这与无效凭据有关。我尝试关注文档,但它们似乎已过时。
这是我所做的:
- 我去了 Google API 管理器并启用了“Google Cloud Messaging”。
- 在 Credentials > OAuthConsentScreen 下,我添加了电子邮件、产品名称和 url
- 在 Credentials > Create credentials > OAuthClientID > Web Application 下,我给它起了一个名字,并将一些 URL 放在 Authorized JavaScript origins 下,比如 localhost。这是否需要特定的东西,因为它没有在文档中提到。
然后谷歌给了我一个客户端 ID 和一个客户端密码。这是文档过时的地方。
- 客户端 ID 的格式为:
123456789012-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com
- 客户端密码的形式为:
XXXXXXXXXXXXXXXXXXXXXXXX
- 客户端 ID 的格式为:
然后,我导航到 Appcelerator 仪表板中的推送通知部分,然后单击“Android 云消息传递”。请注意,根据文档我应该:
在 GCM API 密钥字段中输入服务器密钥,在 GCM 发件人 ID 字段中输入 GCM 发件人 ID
然而,现在双方的领域不同。因此,我将以下内容从 Google 复制到 Appcelerator:
- Google 的 Appcelerator 服务器密钥的客户端密钥
- Google 的客户端 ID 到 Appcelerator 的服务器 ID
/
CloudPush
然后我使用建议的模块将我的 Andriod 设备订阅到一个频道(效果很好)但是,在从 Appcelerator 仪表板发送通知时,我的 Android 设备旁边会出现“失败”一词。
突出显示“?”时的完整错误消息 图标如下:
异常类型:GCM;错误代码:3103;错误消息:RegistrationId(s) 为空或为空;捕获的异常:参数不能为空
我在http://docs.appcelerator.com/arrowdb/latest/#!/guide/troubleshooting上查看了这个错误,它说的是:
GCM 客户端提供了一个 null 或空的注册 ID。如果您使用的是 Modules.CloudPush 模块,则此错误并不常见。
这没有帮助。
我究竟做错了什么?我认为我输入的凭据错误,但不知道如何。
我使用的文档如下:
谢谢!
更新
经过很多建议后,我通过转到“创建凭据”>“API 密钥”创建了另一组凭据。这给出了形式的新键XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
。然后我用:
- Google 为 Appcelerator 的服务器密钥提供的 API 密钥
- Google 的项目编号(格式
123456789012
为 ),用于 Appcelerator 的服务器 ID
但是,仍然会出现完全相同的错误。
更新 2
在阅读了另一个 Stack Overflow 答案(Appcelerator 钛 Android 推送通知 GCM 失败?)后,我决定将应用程序链接到 Firebase。在 Friebase 仪表板上,我转到“Cog”>“项目设置”>“云消息传递”。
它向我显示了发件人 ID(与项目编号完全相同)和不同的服务器密钥。
当我使用这些凭据时,在发送推送通知时会收到一个稍微不同的错误:
异常类型:GCM;错误代码:3006;错误消息:registration_id 中包含的 sender_id 与用于向 GCM 服务器注册的 sender_id 不匹配