我目前正在调查在线离线支持的应用程序并弄清楚APNS的使用情况,当我的应用程序仅处理单个用户时,它很容易理解。(就像短信一样)
我的理解是,安装到特定设备的每个应用程序都有自己的设备令牌(即使在注销到APNS并再次重新注册后也不会更改)。因此,当用户从不同设备登录时,APNS又可以识别服务器。
然而,当我尝试实施多个帐户应用程序(就像Facebook,不同的人可以使用同一个手机登录)时,出现了一些问题。
当用户A登录并且应用程序处于后台状态时,它确实收到了通知。
但是当用户A退出时(手机没有互联网连接,这意味着无法立即更新服务器以删除帐户),然后用户B登录,同时服务器尝试将通知推送到对于用户A的电话,电话已经收到通知(但是用户A的通知),用户B将收到该通知(在实际情况下不应该发生)。
似乎APNS无法检查应用内帐户身份验证。
所以,我的问题是,
有没有办法检查并删除手机上的通知(我已阅读Apple Doc。并注意到存有最后通知的QoS)?
使用APNS时处理此类身份验证问题的良好做法是什么?
如果我有任何概念上的误解,请(如果有的话)纠正我。并希望我的问题听起来并不愚蠢和笨拙,并且没有任何问题重复......
答案 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用户中的其他用户被注销,则无所事事
希望它有所帮助。也许我错了,如果你的意思是另一个。