GCM,注册ID和处理用户登录/注销

问题描述 投票:4回答:1

我有一个应用程序,允许用户使用服务器发出的凭据登录,可以说使用密码和用户名进行简单登录。因此,用户启动该应用程序,输入用户名和密码,服务器对用户进行身份验证,然后保存此信息。 (在这种情况下,细节实际上不起作用)。我需要实现什么?我的服务器需要通知用户时发生了一些事件。让我们考虑订单状态已更改。如果是这样,我需要通过状态栏中的通知来通知用户。我决定将GCM用于此任务。我读到了这件事,并提出了一些问题。

  1. 当用户从android中的GCM服务获取注册ID时,它是常量还是可以更改。据我了解,不能保证总是一样。因此,我该如何处理此ID的刷新。或者,如果我不调用GoogleCloudMessaging.getInstance(applicationContext).register,它将保持不变,直到我注册新的内容,或者即使我调用了register方法,它也可以返回相同的ID。我可以将此ID保存在SharedPreferences中以例如长时间使用吗?或一段时间后它可能变得无效?

  2. 主要问题是我需要在同一设备上处理多个用户。据我所知,gcm服务发布的注册ID绑定到设备和应用程序。因此,如果新用户注销并使用新凭据(新用户帐户)登录,我该如何处理?例如,我可以将此ID存储在服务器上的数据库中,并使用它,直到用户从我的应用程序内的帐户中注销为止,然后将其从数据库中删除,如果此设备上的用户将使用另一个帐户注册ID登录,则可以用来通知另一个用户?能行吗?或者我错过了一些东西。

  3. 我如何处理用户的多个设备。我的群组通知密钥将是来自用户帐户(电子邮件,用户名..)的一些唯一数据。如果我理解正确,我需要在用户使用其服务器帐户登录的所有设备上获取注册ID,并将其映射到一个通知密钥。我是否应该自己处理通知的取消,而不是向GCM服务器发送上游消息,以便通知其他用户设备通知已被取消?

请帮助您理解此服务。预先感谢。

android login push-notification google-cloud-messaging
1个回答
6
投票

我已经在我们的一个应用程序中实现了此功能。在此方法中,每当添加新列表时,我们都会向用户发送通知。

用户可以同时从多个设备登录。设备可以是android或iOS。另外,多个用户可以从同一设备登录(注销以前的用户之后)。

[每当用户从Android设备登录时,都会从GCM获取注册ID。对于一台设备,此GCM ID并不是恒定不变的,只要您再次向GCM服务器请求,它就会被更改。

我们使用通知密钥将通知发送到多个设备,其中包含所有设备的GCM注册ID。如果您丢失通知密钥,将无法取回。更糟糕的是,您无法使用先前使用的通知密钥名称重新生成新的通知密钥。切勿使用用户帐户(电子邮件,用户名..)中的唯一数据作为通知键名称。始终生成一些随机字符串作为通知键名称。

要克服此问题,请执行以下步骤:

  1. 创建一个表以存储以下详细信息列 :ID用户身份deviceGCMId设备编号notificationKeynotificationKeyName

  2. 每当用户登录时,都会向服务器发送以下参数。GCMId,deviceId,userId

  3. 首先检查userId和deviceId是否存在。如果不存在,则转到步骤5,否则转到步骤6
  4. 从给定的userId获得表中的notificationKey和notificationKeyName。如果未找到,则生成新的notificationKeyName,然后从该密钥生成新的notificationKey。使用当前的GCMRegId生成密钥。将密钥存储在变量中。
  5. 在表中添加在步骤4中生成的具有NotificationKey和键名的新条目。还要在通知键下添加GCM ID。
  6. 检查deviceId相同且GCM ID不同,然后在表中添加更新GCM ID并在通知键下添加该GCM ID。如果设备ID和GCM ID相同,则无需执行任何操作

有时通知密钥从GCM服务器中丢弃,并且显示密钥未找到错误。在这种情况下,请从新的密钥名称创建新的notificationKey,并针对该密钥添加GCM ID。

有关更多信息,请通过以下有用链接

https://medium.com/appunite-edu-collection/notifications-d7df385b0ff4

https://medium.com/@Bicx/adventures-in-android-user-notifications-e6568871d9be

希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.