【问题标题】:Appcelerator/ Titanium: Getting Android credentials to push notificationsAppcelerator/Titanium:获取 Android 凭据以推送通知
【发布时间】:2026-02-16 15:25:01
【问题描述】:

我希望能够在 Android 上使用 Titanium 发送推送通知。但是,每当我尝试此操作时,都会出现后端错误,我认为这与无效凭据有关。我尝试关注文档,但它们似乎已经过时了。

这就是我所做的:

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

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

在 GCM API 密钥字段中输入服务器密钥,并在 GCM 发件人 ID 字段

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

  • Google 的 Appcelerator 服务器密钥的客户端密钥
  • Google 的客户端 ID 到 Appcelerator 的服务器 ID

/

  1. 然后我使用建议的 CloudPush 模块将我的 Andriod 设备订阅到一个频道(效果很好)

  2. 但是,当涉及到发送通知时,来自 Appcelerator 仪表板的“失败”一词出现在我的 Android 设备旁边。

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

异常类型:GCM;错误代码:3103;错误信息: RegistrationId(s) 为 null 或为空;捕获的异常:参数不能 为空

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

GCM 客户端提供了一个空的注册 ID。这个错误是 如果您使用的是 Modules.CloudPush 模块,则不常见。

这没有帮助。

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

我使用的文档如下:

Configuring Push Services

Subscribing to push notifications

Modules.CloudPush

谢谢!

更新

经过很多建议后,我通过转到“创建凭据”>“API 密钥”创建了另一组凭据。这给出了XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 形式的新密钥。然后我用了:

  • Google 用于 Appcelerator 服务器密钥的 API 密钥
  • Google 的项目编号(格式为 123456789012),用于 Appcelerator 的服务器 ID

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

更新 2

在阅读了另一个 Stack Overflow 答案 (Appcelerator titanium Android push notification GCM failure?) 后,我决定将应用程序链接到 Firebase。在 Friebase 仪表板上,我转到“Cog”>“项目设置”>“云消息传递”。

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

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

异常类型:GCM;错误代码:3006;错误消息:sender_id 包含在 registration_id 中的 sender_id 与用于 向 GCM 服务器注册

【问题讨论】:

  • 第二次更新中显示的错误似乎类似于MismatchSenderId。确保您使用的发件人 ID 与令牌相关联(通常可以在您添加到应用程序的 google-services.json 中检查)。另见我的回答here
  • @AL。我从 FireBase 下载了google-services.json 文件。但是没有名为Sender ID 的字段。在“Cog”>“Project settings”>“Cloud Messaging”下确实存在发件人ID,好像和project_number一样。

标签: android push-notification google-cloud-messaging appcelerator appcelerator-arrow


【解决方案1】:

我终于设法让它发挥作用。基本上这些文档已经严重过时了。

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

这会显示您的“发件人 ID”(与您的项目编号相同)。对我来说,这是一个 12 位数字。

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

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

异常类型:GCM;错误代码:3006;错误消息:sender_id 包含在 registration_id 中的 sender_id 与用于 向 GCM 服务器注册

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

旁注:

将您的应用链接到 Firebase 会在您的 Google 控制台 API 凭据页面中自动创建很多 API 密钥,命名为“____ 密钥(由 Google 服务自动创建)”。

“旧版服务器密钥”似乎与以下名称相匹配:服务器密钥(由 Google 服务自动创建)

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

【讨论】:

  • "该页面还显示了一个服务器密钥和一个旧服务器密钥。您使用哪个似乎无关紧要。" -- 目前两者仍然有效,但它强烈建议使用服务器密钥,而不是旧版。 :)
【解决方案2】:

当我这样做时,我创建了一个 API 密钥,而不是 OAuth 客户端 ID。 与您的屏幕相同,但从 Create credentials 下拉菜单中选择 API Key。

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

创建一个 Google API 项目

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

从这里创建/编辑一个项目: https://console.developers.google.com/project

创建完成后,点击左上角的汉堡菜单,将鼠标悬停在 API Manager 上并选择 Credentials

在凭据选项卡上 点击 Create Credentials 并选择 API Key

复制并粘贴到箭头仪表板

点击汉堡菜单 - IAM & Admin -> 设置 复制项目编号 - 将其粘贴到 Arrow 仪表板

【讨论】:

  • 服务器 ID 呢?
  • 请您确保您最近尝试过此操作,因为 Google 和 Appcelerator 端的情况都发生了变化。截图会很有帮助。
  • Arrow 中的服务器密钥是您创建的 API 密钥。箭头中的发件人 ID 是 IAM 和管理设置屏幕中的项目编号,而不是项目 ID dropbox.com/s/df7qgnn0q5cyeon/…>
  • 谢谢,但我现在也使用了它,但仍然无法正常工作。现在更新问题。
  • 您介意自己尝试一下吗,因为我相信最近情况发生了变化。
最近更新 更多