我在XMPP应用程序中工作。 当我终止并杀死我的应用程序时,
1)XMPP服务器中未连接用户。用户离线。但我希望用户连接和在线。像Whats App(申请)。
2)我当时无法从XMPP服务器端获取任何消息,
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
此方法不是调用。那么,我如何获得消息?
而且我也实现了Pushnotification但是这样同样的问题就像,当应用程序杀死和终止时,这个方法不是调用,
- (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
所以,请以正确的方式指导我并建议我如何像应用程序一样工作(应用程序)。
另外,我们无法设置VOIP Flag In .plist文件因为这种方式不适合并被苹果拒绝。
我的目标只是通知工作与Whats App一样。
答案 0 :(得分:5)
1)XMPP服务器中未连接用户。用户离线。但我想要 用户已连接并已联机。像Whats App(申请)。
关闭或最小化WhatsApp后,用户离线(在iPhone4s上测试),并且在此状态下收到的消息都是推送通知。
2)我当时无法从XMPP服务器端获取任何消息,
只有在应用程序处于活动状态时才会调用此方法。因此,在您杀死应用程序后,您无法在此处收到消息。
- (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
此方法将在以下场景中调用
当然你不能使用VOIP。
当用户在WhatsApp中处于活动状态时,WhatsApp会显示自定义通知。 您需要为对话的每条消息发送推送通知。在这种情况下
当用户点击通知时,系统将启动应用程序,您必须检查应用程序启动条件(启动源应用程序)并根据条件加入服务器/聊天(如果您正在使用群组聊天,则检查组)。 / p>
使用您的姓名/昵称加入服务器后,您将收到最近的聊天记录。您还可以获取历史记录,加入聊天服务器/组时需要指定。
确保在应用程序最小化或被杀死时断开与服务器以及组的连接。使用以下方法断开连接和/或相关更改
1. - (void)applicationDidEnterBackground:(UIApplication *)application
2. - (void)applicationWillTerminate:(UIApplication *)application
希望这会对你有所帮助,我已经实现了同样的目标,以达到WhatsApp的预期效果。
答案 1 :(得分:4)
当您的应用程序终止时,那个时候XMPP停用所有服务。因此,您可以将webservice发送到服务器,它可以告诉您 - 您处于离线状态。
然后,服务器可以发送推送通知所有聊天内容。
答案 2 :(得分:2)
首先,如果您的申请被终止,那么您将在
中收到Push Notification
个数据
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
带有键的launchOptions
字典中的
if (launchOptions)
{
if ([launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey])
{
// Your code
}
}
其次,您可以使用后台提取来检索用户的消息。在后台提取时,您可以连接您的流并从XMPP服务器获取消息。
注意:WhatsApp的(iOS)版本会在您打开应用程序时立即获取消息,它会连接到流然后提取消息。
但是,您可以实现自己的逻辑来自定义您的功能。
答案 3 :(得分:2)
在启动应用之前,请先检查link并阅读Remote Notifications (iOS 7 and Greater)
组合Background Modes and Remote notifications
以下载内容的部分。
你会得到这个想法,你可以用你喜欢的语言obj-c或swift实现。
答案 4 :(得分:2)
阅读以下文档,它将对您有所帮助。 http://xmpp.org/extensions/xep-0168.html
当用户的存在设置如下时,我们需要添加优先级:
-(void)GoOnline{
XMPPPresence *goOnline = [XMPPPresence presence];
NSXMLElement *priority = [NSXMLElement elementWithName:@"priority" stringValue:@"-1"];
[goOnline addChild:priority];
[xmppStream sendElement:goOnline];
}
现在要了解有关优先级,角色及其工作原理的更多信息,请阅读上述链接中的文档。
希望它可以帮助你:)