IOS在不打开电话服务的时候,可以响应服务器的推送消息,从而接收服务器的推送消息

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

在做即时通讯(基于xmpp框架)的时候遇到这样一个问题,就是在真机测试的时候,你按Home键返回桌面,在你返回桌面的时候,这是你的程序的挂起状态的,在你挂起的时候,相当于你的程序是死的,程序的所有进程全部是睡眠状态,所有这时候你做任何操作,都是无用的,手机永远也接收不到你的任何消息推送,因为在这里,手机处于休眠状态,这时候你必须要把他唤醒,才能正常的接收你所推送过来的消息,当时我的应用是打开了电话服务,因为电话服务永远都是让手机保持唤醒状态,所有在你手机处于任何状态的时候,都可以接到电话的,所有这就是电话服务。我当时用的就是这样的一个服务,使我的程序不被睡眠,当我上架AppStore的时候,被苹果拒绝了,所有绞尽脑汁想到了一个解决方法.如图是添加的电话服务,在我添加这样的服务时候,苹果商店不让上架AppStore的。所以我想了别的办法

如图是解决的办法:在AppDelegate中。添加上这么一段代码即可。1- (void)applicationDidEnterBackground:(UIApplication *)application2{3[[UIApplication sharedApplication]setApplicationIconBadgeNumber:0];//进入前台取消应用消息图标456UIApplication* app =[UIApplication sharedApplication];78__block UIBackgroundTaskIdentifier bgTask;910bgTask = [app beginBackgroundTaskWithExpirationHandler:^{1112dispatch_async(dispatch_get_main_queue(), ^{1314if(bgTask !=UIBackgroundTaskInvalid)1516{1718bgTask =UIBackgroundTaskInvalid;1920}2122});2324}];2526dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{2728dispatch_async(dispatch_get_main_queue(), ^{2930if(bgTask !=UIBackgroundTaskInvalid)3132{3334bgTask =UIBackgroundTaskInvalid;3536}3738});3940});4142}

好了,这就是我的解决办法,不用系统的电话服务照样可以唤醒程序不被睡眠,导致后台推送不过来消息。。

谢谢大家,我们以后可以多多学习,多多进步。。

PS:不知道别的办法是什么,有别的办法的可以给我留言,我们一同探讨。。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航