Iphone 我应该如何使用APN处理多帐户应用程序?

Iphone 我应该如何使用APN处理多帐户应用程序?,iphone,xcode,apple-push-notifications,account,Iphone,Xcode,Apple Push Notifications,Account,我目前正在一个支持在线和离线的应用程序中进行调查,了解APN的使用情况,当我的应用程序只处理单个用户时,这很容易理解。(就像SMS一样) 我的理解是,安装到特定设备上的每个应用程序都有自己的设备令牌(即使在注销到APN并重新注册后也不会更改)。因此,当用户从不同的设备登录时,APN和服务器可以识别 然而,当我尝试实现一个多账户应用程序(就像Facebook一样,不同的人可以使用同一部手机登录)时,出现了一些问题 当用户A登录且应用程序处于后台状态时,它确实收到了通知 但是,当用户A注销(当手机没

我目前正在一个支持在线和离线的应用程序中进行调查,了解APN的使用情况,当我的应用程序只处理单个用户时,这很容易理解。(就像SMS一样)

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

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

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

但是,当用户A注销(当手机没有互联网连接时,这意味着无法立即更新服务器以删除帐户),然后用户B登录,同时服务器尝试向手机推送用户A的通知时,手机已收到通知(但这是用户A的通知)而用户B将收到这个消息(这在真实场景中永远不会发生)

似乎APNS无法签入应用程序帐户身份验证

所以,我的问题是

  • 有没有办法检查并删除手机上的通知(我已经阅读了苹果的文档,注意到有一个QoS存储了最后的通知)

  • 在使用APN时处理此类身份验证问题的良好做法是什么

  • 如果我有任何概念上的误解,请纠正我。希望我的问题不要听起来愚蠢和笨拙,也不要有任何问题重复…

    因此,首先:

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

    当用户B登录时,所以internet已连接,然后您可以向您的服务器发送:now userB在该设备令牌上

    对于这种情况:用户B登录,同时服务器试图将通知推送到手机 对于用户A

    如果应用程序已运行,则您将在

    application: (UIApplication*)app didRegisterForRemoteNotificationsWithDeviceToken: (NSData*)deviceToken
    
    不在设备通知中心消息窗口中

    你可以这样做:

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

    2) 如果日志中的其他用户或已注销的用户,则不执行任何操作


    希望有帮助。也许我错了,如果你指的是另一个人

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

    如果没有internet连接,则无法正确注销。如果需要此功能,应使用服务器验证注销。可能会通知用户注销失败,因为无法访问服务器

    以下是一个例子:

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

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

    • 用户A登录到具有设备令牌TY的设备Y

      ->服务器将令牌TX和TY关联为属于用户A

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

      ->服务器向TX和TY发送推送消息

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

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

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

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

      ->服务器向TY发送推送消息

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

      ->服务器向TX发送推送消息

    • 用户B注销,但没有internet连接

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


    谢谢:),也许Facebook的例子不是那么好的xD,因为我的应用程序将支持可以在脱机模式下完成的功能。我确实尝试过在没有网络连接的情况下从Facebook应用程序中注销,但不知怎么的,它确实帮我注销了。而且,对于在线用户来说,发送Push notif in是个坏主意。为了获得好的结果,您可以使用本地通知。但是,我明白了,你需要使用APNSOh!你的意思是,我不应该使用APN的默认“警报”,而是应该以这种方式改变我的策略:服务器仍然要求APN将通知推送到设备上,而不显示任何类型的警报视图以及徽章编号的增量,而是发送一些用户信息,如“接收者”:john@gmail.com"以及检查刚刚登录的用户是否为john@gmail.com或者不是。如果是,请充分利用本地通知,否则什么也不做。这就是你的意思吗?我是说,你为什么要用APN?您可以使用任何POST、GET postes来检查用户登录和注销。如果是真正的用户,请发送24小时后到达的本地通知。如果用户将注销,您可以轻松取消本地notif并发送新的。哦,我使用它是因为我想立即提示用户,例如,当用户不使用我的应用程序(后台应用程序)时,有一个新项目可供检索。谢谢!然而,正如我在另一个答案下的评论中所提到的,我的应用程序需要离线功能(实际上我的应用程序是一个离线占主导地位的应用程序……因此,不知何故不能提示用户注销失败,因为他们没有连接到服务器……看起来很奇怪……)想知道Facebook是如何允许它的