2015-06-21 94 views
4

我有一个应用程序,允许用户使用服务器发出的凭据登录,可以说使用密码和用户名简单登录。
因此,用户启动应用程序,输入用户名和密码,服务器验证用户,保存此信息。 (在这种情况下细节确实不起作用)。
我需要实现什么?
有一些事件,当我的服务器需要通知用户。让我们考虑改变订单状态。如果是这样,我需要在状态栏中通知用户。
我决定使用GCM来完成这项任务。
我读到这个,并得到了一些问题。GCM,注册ID和处理用户登录/注销

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

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

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

请帮助理解这项服务。
在此先感谢。

回答

6

我已经在我们的一个应用程序中实现了这一点。在此我们发送通知给用户每当新的列表被添加。

用户可以同时从多个设备登录。设备可能是android或ios的任何东西。 也有多个用户可以从同一设备登录(注销以前的用户后)。

每当用户从Android设备登录时都会从GCM获取注册ID。这个GCM ID对于一个设备来说不是恒定的,只要你再次从GCM服务器请求它,它就会被更改。

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

为了克服这个遵循以下步骤 1.创建一个表来存储以下detsils 色谱柱: ID 用户id deviceGCMId DEVICEID notificationKey notificationKeyName

  • 每当用户登录将以下参数发送到服务器。 GCMId,deviceId,userId
  • 首先检查userId和deviceId是否存在。 如果不存在,则转到步骤5否则转到步骤6
  • 从给定的userId获取表中的notificationKey和notificationKeyName。如果未找到,则生成新的notificationKeyName,并从该密钥生成新的notificationKey。使用当前GCMRegId生成密钥。将密钥存储在变量中。
  • 在表格中添加新的条目,并在步骤4中生成notificationKey和键名。还要在通知键下添加GCM ID。
  • 检查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

    希望这将有助于

    +0

    用户可以得到以前的消息,直到用户注销?当登录用户收到消息。希望我清楚。谢谢 – mubeen

    +0

    如果从应用程序注销,用户将不会收到消息。因为无论何时注销操作,我们都会从通知密钥中删除设备GCM ID。 –

    +0

    是的,但是,如果我们将注销用户的数据存储在其他存储中,并且用户登录时,它会检查用户的可用数据并将其发送给用户。这是我的想法。 – mubeen