Appcelerator/ Titanium:获取 Android 凭据以推送通知
Appcelerator/ Titanium: Getting Android credentials to push notifications
我希望能够在 Android 上使用 Titanium 发送推送通知。但是,每当我尝试此操作时,我都会收到 back-end 错误,我认为这与无效凭据有关。我尝试按照文档进行操作,但它们似乎已过时。
这是我所做的:
- 我去了 Google API 经理并启用了 "Google Cloud Messaging"。
- 在凭据 > OAuthConsentScreen 下,我添加了电子邮件、产品名称和网址
- 在 Credentials > Create credentials > OAuthClientID > Web Application 下,我给它起了一个名字,并把一些 URL 放在授权的 JavaScript 来源下,比如 localhost。 这是否需要具体说明,因为文档中未提及。
Google 然后给我一个客户端 ID 和一个客户端密码。 这是文档过时的地方。
- 客户端 ID 的格式为:
123456789012-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com
- 客户端机密的格式为:
XXXXXXXXXXXXXXXXXXXXXXXX
然后我导航到 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:
- GoogleAppcelerator 服务器密钥的客户端密钥
- Google 的客户端 ID 到 Appcelerator 的服务器 ID
/
然后我使用建议的 CloudPush
模块
将我的 Andriod 设备订阅到一个频道(效果很好)
然而,当涉及到 发送 通知时,从 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.
这没有帮助。
我做错了什么?我想我输入的凭据有误,但不确定是如何输入的。
我使用的文档如下:
Subscribing to push notifications
谢谢!
更新
在听取了很多建议后,我通过转到 "Create Credentials" > "API Key" 创建了另一组凭据。这给出了一个形式为 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
的新密钥。然后我使用了:
- Google 的 API Appcelerator 服务器密钥的密钥
- Google的项目编号(格式为
123456789012
),Appcelerator的服务器ID
但是仍然出现完全相同的错误。
更新 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 键。
我希望能够在 Android 上使用 Titanium 发送推送通知。但是,每当我尝试此操作时,我都会收到 back-end 错误,我认为这与无效凭据有关。我尝试按照文档进行操作,但它们似乎已过时。
这是我所做的:
- 我去了 Google API 经理并启用了 "Google Cloud Messaging"。
- 在凭据 > OAuthConsentScreen 下,我添加了电子邮件、产品名称和网址
- 在 Credentials > Create credentials > OAuthClientID > Web Application 下,我给它起了一个名字,并把一些 URL 放在授权的 JavaScript 来源下,比如 localhost。 这是否需要具体说明,因为文档中未提及。
Google 然后给我一个客户端 ID 和一个客户端密码。 这是文档过时的地方。
- 客户端 ID 的格式为:
123456789012-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com
- 客户端机密的格式为:
XXXXXXXXXXXXXXXXXXXXXXXX
- 客户端 ID 的格式为:
然后我导航到 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:
- GoogleAppcelerator 服务器密钥的客户端密钥
- Google 的客户端 ID 到 Appcelerator 的服务器 ID
/
然后我使用建议的
CloudPush
模块 将我的 Andriod 设备订阅到一个频道(效果很好)
然而,当涉及到 发送 通知时,从 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.
这没有帮助。
我做错了什么?我想我输入的凭据有误,但不确定是如何输入的。
我使用的文档如下:
Subscribing to push notifications
谢谢!
更新
在听取了很多建议后,我通过转到 "Create Credentials" > "API Key" 创建了另一组凭据。这给出了一个形式为 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
的新密钥。然后我使用了:
- Google 的 API Appcelerator 服务器密钥的密钥
- Google的项目编号(格式为
123456789012
),Appcelerator的服务器ID
但是仍然出现完全相同的错误。
更新 2
阅读另一个 Stack Overflow 答案 (
它向我显示了发件人 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 键。