XMPP应用程序终止而不是回复消息

Raj*_*aju 7 iphone xmpp objective-c ios

我在XMPP应用程序中工作.当我终止并杀死我的应用程序时,

1)XMPP服务器中未连接用户.用户离线.但我希望用户连接和在线.像什么应用程序(应用程序).

2)我当时无法从XMPP服务器端获取任何消息,

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
Run Code Online (Sandbox Code Playgroud)

这种方法不是调用.那么,我如何获得消息?

而且我也实现了Pushnotification但是这样同样的问题就像,当app是Kill和Terminate时,这个方法不是调用,

- (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler 
Run Code Online (Sandbox Code Playgroud)

所以,请指导我以正确的方式,并建议我如何工作,就像相同的什么应用程序(应用程序).

另外,我们无法设置VOIP Flag In .plist文件因为这种方式不适合并被苹果拒绝.

我的目标只是通知工作就像Whats App一样.

Har*_*agh 5

1)XMPP服务器中未连接用户.用户离线.但我希望用户连接和在线.像什么应用程序(应用程序).

关闭或最小化WhatsApp后,用户将脱机(在iPhone4s上测试),并且在此状态下收到的消息将作为推送通知.

2)我当时无法从XMPP服务器端获取任何消息,

  • (void)xmppStream:(XMPPStream*)sender didReceiveMessage:(XMPPMessage*)消息

仅在应用程序处于活动状态时才会调用此方法 因此,在您杀死应用程序后,您无法在此处收到消息.

- (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler 
Run Code Online (Sandbox Code Playgroud)

将在以下方案中调用此方法

  1. 如果您的应用处于有效状态并且您有任何新的推送通知
  2. 如果您的应用程序处于后台或已杀死或未启动,则系统将仅在顶部栏上显示通知,一旦用户点击通知,它将打开您的应用程序,然后该方法将被调用.

当然,你不能使用VOIP.

当用户在WhatsApp中处于活动状态时,WhatsApp会显示自定义通知.您需要为对话的每条消息发送推送通知.在这种情况下

  1. 如果用户处于活动状态,则在应用中显示自定义通知.
  2. 如果用户处于非活动状态(即已杀死或最小化应用程序),则系统将在通知中心显示通知.

当用户点击通知时,系统将启动应用程序,您必须检查应用程序启动条件(启动源应用程序)并根据条件加入服务器/聊天(如果您正在使用群聊,则为组).

一旦您使用您的姓名/昵称加入服务器,您将获得最近的聊天记录.您还可以获取历史记录,您需要在加入聊天服务器/组时指定.

当您的应用程序被最小化或被杀死时,请确保您与服务器以及组之间断开连接.使用以下方法断开连接和/或相关更改

 1. - (void)applicationDidEnterBackground:(UIApplication *)application
 2. - (void)applicationWillTerminate:(UIApplication *)application
Run Code Online (Sandbox Code Playgroud)

希望这对你有所帮助,我已经实现了同样的目标,以达到WhatsApp的预期效果.


Vat*_*l K 2

首先,如果您的应用程序被终止,那么您将收到Push Notification以下数据:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Run Code Online (Sandbox Code Playgroud)

launchOptions在带有键的字典中

 if (launchOptions)
    {
        if ([launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey])
        {
        // Your code
        }
    }
Run Code Online (Sandbox Code Playgroud)

其次,您可以使用后台获取来检索用户的消息,而后台获取您可以连接流并从 XMPP 服务器获取消息。

注意:WhatsApp 的 (iOS) 版本在您打开应用程序后立即获取消息,它会连接到流,然后获取消息。

但是,您可以实现自己的逻辑来自定义您的功能。