你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> IOS 在不打開電話服務的時候,可以響應服務器的推送消息,從而接收服務器的推送消息

IOS 在不打開電話服務的時候,可以響應服務器的推送消息,從而接收服務器的推送消息

編輯:IOS技巧綜合
[摘要]本文是對IOS 在不打開電話服務的時候,可以響應服務器的推送消息,從而接收服務器的推送消息的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。
      在做即時通訊(基於xmpp框架)的時候遇到這樣一個問題,就是在真機測試的時候,你按Home鍵返回桌面,在你返回桌面的時候,這是你的程序的掛起狀態的,在你掛起的時候, 相當於你的程序是死的,程序的所有進程全部是睡眠狀態,所有這時候你做任何操作,都是無用的,手機永遠也接收不到你的任何消息推送,因為在這裡,手機處於休眠狀態,這時候你必須要把他喚醒,才能正常的接收你所推送過來的消息,當時我的應用是打開了電話服務,因為電話服務永遠都是讓手機保持喚醒狀態,所有在你手機處於任何狀態的時候,都可以接到電話的,所有這就是電話服務。我當時用的就是這樣的一個服務,使我的程序不被睡眠,當我上架AppStore的時候,被蘋果拒絕了,所有絞盡腦汁想到了一個解決方法.如圖是添加的電話服務,在我添加這樣的服務時候,蘋果商店不讓上架AppStore的。所以我想了別的辦法

      如圖是解決的辦法:在AppDelegate中。添加上這麼一段代碼即可。
 - (void)applicationDidEnterBackground:(UIApplication *)application
 {
     [[UIApplication sharedApplication]setApplicationIconBadgeNumber:0];//進入前台取消應用消息圖標
     
     
     UIApplication*   app = [UIApplication sharedApplication];
     
     __block    UIBackgroundTaskIdentifier bgTask;
     
     bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
         
         dispatch_async(dispatch_get_main_queue(), ^{
             
             if (bgTask != UIBackgroundTaskInvalid)
                 
             {
                 
                 bgTask = UIBackgroundTaskInvalid;
                 
             }
             
         });
         
     }];
     
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         
         dispatch_async(dispatch_get_main_queue(), ^{
             
             if (bgTask != UIBackgroundTaskInvalid)
                 
             {
                 
                 bgTask = UIBackgroundTaskInvalid;
                 
             }
             
         });
         
     });
 
 }

好了,這就是我的解決辦法,不用系統的電話服務照樣可以喚醒程序不被睡眠,導致後台推送不過來消息。。

謝謝大家,我們以後可以多多學習,多多進步。。

PS:不知道別的辦法是什麼,有別的辦法的可以給我留言,我們一同探討。。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved