如何在 Parse.com 中验证 deviceToken 的 GCM 发件人 ID

Posted

技术标签:

【中文标题】如何在 Parse.com 中验证 deviceToken 的 GCM 发件人 ID【英文标题】:How to verify GCM sender ID of deviceToken in Parse.com 【发布时间】:2016-02-02 08:44:01 【问题描述】:

我们正在使用 Parse.com 发送推送通知。随着宣布的关闭,我们现在正在研究如何迁移到另一个服务。在 android 上,我们没有配置任何 GCM 发件人 ID,因此我们一直在隐式使用 Parse.com 的发件人 ID。这是迁移的问题(请参阅Urgent note for Parse Android Push users 和Migrating an Existing Parse App(导出 GCM 注册 ID 部分))。

因此,我们现在正在准备使用我们自己的 GCM 发件人 ID 的新版 Android 应用。 Parse.com 中是否有任何方法可以验证哪些设备(安装)与我们的发件人 ID 相关联?我们如何检查我们的更新是否成功? Google 是否提供任何 API 来直接或间接检查发件人 ID 是否适用于我们的 Google 项目?

任何涉及编写代码的工具或任何方法都可以。

【问题讨论】:

您使用的服务器端语言是什么? 到目前为止,我们使用 Parse.com 的 REST API 发送推送通知(来自 Java)。但如果我们使用 Parse.com 的控制台(并且根本没有编程语言),这个问题同样适用。 好吧。你还是不想使用像 php 或 asp.net 这样的编程语言吗? 请告诉我如何验证现在是否以及哪些手机与我们自己的发件人 ID 相关联。一旦我理解了这种方法,我以后可以很容易地想出代码。 在网上看到一些文章后,我发现他们的数据库中应该有一些选项来了解与您自己的发件人 ID 关联的用户数量。如果没有这样的选项,那么我们必须等到 parse.com 提供迁移工具。 【参考方案1】:

感谢您发布此问题。我帮助处理 OneSignal,并根据反馈更新了上述博客文章。

博客文章现在指示用户也更新他们的 ParseInstallation 以设置他们的 GCMSenderId,如下所示:

final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
parseInstallation.put("GCMSenderId",YOUR_NEW_SENDER_ID); 
parseInstallation.saveInBackground();`

这将允许您跟踪哪些用户现在订阅了新的 GCM 发件人 ID。它还会告诉像我们这样的 Parse 导入工具,这些订阅的设备可以被导入和使用。

【讨论】:

【参考方案2】:

开源 Parse Server 项目目前不支持推送通知,但它在路线图中,应该很快就会可用。

如果您希望将 Parse Push 应用程序迁移到另一个 GCM 提供程序,您需要使用自己的 GCM Sender Id 更新您的 Android Manifest 文件。将应用部署到 Google Play 商店后,更新到最新版本应用的客户端也将使用您的 GCM 发件人 ID 进行注册。

您需要跟踪有多少活跃用户已更新到该应用的新版本,以便更好地了解您的迁移进展情况。

Parse 安装对象自动跟踪客户端应用程序版本号。确定有多少客户端已将您的应用程序更新到应用程序的新版本的一种快速简便的方法是过滤运行新 appVersion 或更新版本的安装对象。

当然,在 Google Play 商店发布新版本之前,您应该确保应用的更新版本已使用您的新发件人 ID 在 GCM 中正确注册。 Android Documentation on Cloud Messaging 涵盖了这方面的最佳实践。如果您的应用配置正确,您应该能够使用新的推送通知提供程序向更新的客户端发送推送通知。

【讨论】:

你确定吗?我的理解是Installation 对象的GCMSenderId 在迁移 Parse.com 时使用(而不是离开它),并且它必须显式设置并且不会由Parse 自动设置。 com。事实上,对于我们所有的安装,这个字段都是空的(根据 Parse.com 控制台)。 刚刚验证了这一点,你是对的。在这种情况下,您可以从客户端显式设置您正在使用的 GCMSenderId。这应该允许您跟踪哪些安装已迁移到您自己的发件人 ID。如果 GCMSenderId 不可写,您应该能够使用 Installation 类上的任意字段来跟踪它。 我觉得这里有误会。我不想在 Parse.com 上写任何数据。相反,我想检索 Parse.com 已自动存储的数据,并验证设备是否已迁移到我们自己的发件人 ID,我已根据 Parse.com 的说明在我们的应用清单中配置了该发件人 ID。那么我需要读取哪些数据以及如何验证呢? 我认为没有其他方法可以解决它。 Parse.com 使用自己的发件人 ID,除非安装是使用不同的发件人 ID 导入的。在您的情况下,您正在迁移到不同的推送服务,并且您正在更新您的客户端以使用您自己的发件人 ID。 Parse.com 不会出于任何目的使用此发件人 ID,并且不会在安装过程中对其进行跟踪。如果您需要跟踪哪些设备正在运行您更新的代码(使用新的发件人 ID),则需要以某种方式对其进行跟踪。这可以在 Parse.com 或其他地方进行跟踪。 Installation 对象是最方便的恕我直言。 根据 OneSignal 的说法,可以将发件人 ID 添加到清单中,发布应用程序并让它运行几个月,就像这样。之后,他们可以从 Parse.com 导入数据,并将推送通知发送到自添加发件人 ID 以来运行我们应用程序的所有设备。我不确定他们是否可以预先确定哪些设备可以使用我们的发件人 ID,或者他们是否只有在尝试发送推送通知时才知道。至少我是这么理解的。如果有人能以某种方式预先弄清楚,我想知道它是如何工作的。【参考方案3】:

您可以从我们的指南中找到有关发送和接收推送通知的信息:https://parse.com/docs/android/guide#push-notifications

特别是

...对于想要从多个推送提供者发送推送的开发人员来说,Parse 是一项高级功能,Parse 允许您选择注册您的应用以使用其他 GCM 发送者 ID 进行推送。为此,请使用以下 <meta-data> 标记指定额外的 GCM 发件人 ID,作为应用程序 AndroidManifest.xml 中 <application> 元素的子元素... 和

GCMSenderId:此字段仅对使用 GCM 推送类型的 Android ParseInstallations 有意义。它保留用于指示 Parse 使用备用 GCM 发件人 ID 向此安装发送推送。除非您从另一个推送提供商上传安装数据,否则通常不应设置此字段。如果设置此字段,则必须在 Parse 应用程序的推送设置中设置与此 GCM 发件人 ID 对应的 GCM API 密钥。

【讨论】:

我准备好一个新的应用版本,其中发送者 ID 已在 Android 清单中配置。但是我们现在如何验证具有更新应用程序的设备是否使用我们自己的发件人 ID 进行注册?我在您的回答中看不到这一点。

以上是关于如何在 Parse.com 中验证 deviceToken 的 GCM 发件人 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Parse.com 中使用本地数据存储

向知道电话号码的特定设备发送推送通知,parse.com

Swift,parse.com:如何从查询中传递数据

任何人都知道如何在 QueryForTable 中缩小这个查询(使用 Parse.com)

离线 Parse.com 时如何在 localdatastore 中保存图像 PFFile?

如何在 parse.com 仪表板中添加数组?