我应该如何使用APNS处理多账户应用程序?

时间:2012-08-02 09:04:39

标签: iphone xcode apple-push-notifications account

我目前正在调查在线离线支持的应用程序并弄清楚APNS的使用情况,当我的应用程序仅处理单个用户时,它很容易理解。(就像短信一样)

我的理解是,安装到特定设备的每个应用程序都有自己的设备令牌(即使在注销到APNS并再次重新注册后也不会更改)。因此,当用户从不同设备登录时,APNS又可以识别服务器。

然而,当我尝试实施多个帐户应用程序(就像Facebook,不同的人可以使用同一个手机登录)时,出现了一些问题。

当用户A登录并且应用程序处于后台状态时,它确实收到了通知。

但是当用户A退出时(手机没有互联网连接,这意味着无法立即更新服务器以删除帐户),然后用户B登录,同时服务器尝试将通知推送到对于用户A的电话,电话已经收到通知(但是用户A的通知),用户B将收到该通知(在实际情况下不应该发生)。

似乎APNS无法检查应用内帐户身份验证。

所以,我的问题是,

  1. 有没有办法检查并删除手机上的通知(我已阅读Apple Doc。并注意到存有最后通知的QoS)?

  2. 使用APNS时处理此类身份验证问题的良好做法是什么?

  3. 如果我有任何概念上的误解,请(如果有的话)纠正我。并希望我的问题听起来并不愚蠢和笨拙,并且没有任何问题重复......

2 个答案:

答案 0 :(得分:3)

如果您有从应用程序“注销”的功能(无需登录新用户),我找不到任何方法来停止发送推送通知,除非让服务器知道用户已注销

如果没有互联网连接,则无法正常注销。如果您需要此功能,则应验证服务器的注销。由于无法访问服务器,可以通知用户注销失败。

以下是一个例子:

  • 用户A在具有设备令牌TX的设备X上登录。

    - >服务器将令牌TX关联到属于用户A。

  • 用户A登录设备Y,设备令牌为TY。

    - >服务器将令牌TX和TY关联到用户A。

  • 推送发送给用户A的消息

    - >服务器将推送消息发送到TX和TY。

  • 用户A从设备X注销,用户B在设备X上登录。

    - >服务器删除令牌TX与用户A的关联

    - >服务器将令牌TX与用户B关联。

  • 推送发送给用户A的消息

    - >服务器将推送消息发送到TY。

  • 推送发送给用户B的消息

    - >服务器将推送消息发送到TX。

  • 用户B注销,但没有互联网连接

    - >登录失败,用户B仍然登录,收到“无法注销”对话框

答案 1 :(得分:2)

所以,首先:

用户A如何在没有互联网的情况下注销并登录Facebook?

当用户B登录时,因此连接了互联网,然后您可以发送到您的服务器:现在是此设备令牌的用户B.

对于案例:用户B登录,同时服务器尝试将通知推送到手机 对于用户A

如果app已运行,那么您将获得APNS通知

application: (UIApplication*)app didRegisterForRemoteNotificationsWithDeviceToken: (NSData*)deviceToken

不在设备通知中心消息窗口中。

你可以这样做:

1)如果userA已经在日志中,则发送本地通知以显示通知

2)如果日志OR用户中的其他用户被注销,则无所事事

希望它有所帮助。也许我错了,如果你的意思是另一个。