Appcelerator/ Titanium:获取 Android 凭据以推送通知

Appcelerator/ Titanium: Getting Android credentials to push notifications

我希望能够在 Android 上使用 Titanium 发送推送通知。但是,每当我尝试此操作时,我都会收到 back-end 错误,我认为这与无效凭据有关。我尝试按照文档进行操作,但它们似乎已过时。

这是我所做的:

  1. 我去了 Google API 经理并启用了 "Google Cloud Messaging"。
  2. 在凭据 > OAuthConsentScreen 下,我添加了电子邮件、产品名称和网址
  3. 在 Credentials > Create credentials > OAuthClientID > Web Application 下,我给它起了一个名字,并把一些 URL 放在授权的 JavaScript 来源下,比如 localhost。 这是否需要具体说明,因为文档中未提及。
  4. Google 然后给我一个客户端 ID 和一个客户端密码。 这是文档过时的地方

    • 客户端 ID 的格式为: 123456789012-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com
    • 客户端机密的格式为: XXXXXXXXXXXXXXXXXXXXXXXX
  5. 然后我导航到 Appcelerator 仪表板中的推送通知部分并单击 "Android Cloud Messaging"。请注意,根据文档我应该:

Enter the server key in the GCM API Key field and the GCM sender ID in the GCM Sender ID field

但是现在双方的领域不同了。因此,我将以下内容从 Google 复制到 Appcelerator:

/

  1. 然后我使用建议的 CloudPush 模块

  2. 将我的 Andriod 设备订阅到一个频道(效果很好)
  3. 然而,当涉及到 发送 通知时,从 Appcelerator 仪表板,单词 "Failure" 出现在我的 Android 旁边设备。

突出显示“?”时的完整错误消息图标如下:

Exception Type: GCM; Error Code: 3103; Error Message: RegistrationId(s) is null or empty; Catched Exception: argument cannot be null

我在 http://docs.appcelerator.com/arrowdb/latest/#!/guide/troubleshooting 上查看了这个错误,它只是说:

The GCM client provided a null or empty registration ID. This error is uncommon if you are using the Modules.CloudPush module.

这没有帮助。

我做错了什么?我想我输入的凭据有误,但不确定是如何输入的。

我使用的文档如下:

Configuring Push Services

Subscribing to push notifications

Modules.CloudPush

谢谢!

更新

在听取了很多建议后,我通过转到 "Create Credentials" > "API Key" 创建了另一组凭据。这给出了一个形式为 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 的新密钥。然后我使用了:

但是仍然出现完全相同的错误。

更新 2

阅读另一个 Stack Overflow 答案 () 后,我决定 link 该应用程序到 Firebase。在 Friebase 仪表板上,我转到 "Cog" > "Project settings" > "Cloud Messaging"。

它向我显示了发件人 ID(与项目编号完全相同)和不同的服务器密钥。

当我使用这些凭证时,我在发送推送通知时遇到了一个稍微不同的错误:

Exception Type: GCM; Error Code: 3006; Error Message: The sender_id contained in the registration_id does not match the sender_id used to register with the GCM servers

当我这样做时,我创建了一个 API 密钥,而不是 OAuth 客户端 ID。 与之前的屏幕相同,但从“创建凭据”下拉列表中选择 API 密钥。

这是我的笔记中的一个片段:

创建一个GoogleAPI项目

第一步是创建一个 Google API 项目并启用其 GCM 服务。您还需要获取 GCM 发件人 ID 并创建 Google API 服务器密钥。

create/edit 来自这里的项目: https://console.developers.google.com/project

创建完成后,点击左上角的汉堡菜单,将鼠标悬停在API管理器上,然后选择凭据

在“凭据”选项卡上 单击创建凭据并选择 API 密钥

将其复制并粘贴到 Arrow 仪表板中

单击汉堡菜单 - IAM 和管理 -> 设置 复制项目编号 - 将其粘贴到 Arrow 仪表板中

我终于成功了。基本上文档已经严重过时了。

我设法让它工作的方法是将应用程序链接到 Firebase。 从那里我去了 "Cog/ Settings" > "Cloud Messaging"。

这显示了您的 "Sender ID"(与您的项目编号相同)。对我来说,这是一个 12 位数字。

该页面还显示了一个 服务器密钥 和一个 旧服务器密钥 。使用哪一个似乎并不重要。

如果您在推送通知时仍然收到以下错误:

Exception Type: GCM; Error Code: 3006; Error Message: The sender_id contained in the registration_id does not match the sender_id used to register with the GCM servers

只需卸载应用程序并重新构建即可。

旁注:

将您的应用程序链接到 Firebase 会在您的 Google 控制台 API 凭据页面中自动创建相当多的 API 密钥,名称类似于“____ 密钥(由 Google 服务自动创建)”。

"Legacy server key" 似乎匹配名为:服务器密钥(由 Google 服务自动创建).

请注意,仅自己创建一个 API 密钥似乎不起作用。它必须是与 Firebase 关联的 API 键。