2016-01-18 39 views
2

我想在我的iOS應用程序中啓動一個計時器,當應用程序在後臺運行時以及應用程序關閉時。定時器必須每隔30分鐘檢查一次新的通知。在計時器功能中,他們每30分鐘調用一次函數showNotification()。iOS定時器在後臺

我該如何做這個計時器,以及在應用程序未在後臺運行/運行時,我必須在哪個位置調用計時器。

回答

3

當應用程序不在前臺時,以100%的確定性完成某些操作是不可能的。您可以使用後臺提取功能定期喚醒,但無法控制它何時發生。

儘管有一些技術性的解決方法,甚至可能還有一些黑客解決方案(在後臺播放無聲音頻),但聽起來像您的問題可以在不使用定時器和背景獲取的情況下解決。

只需執行remote notifications。當你的iOS收到你的應用程序的通知時,它會喚醒應用程序並讓它處理一段時間。然後,您可以控制向用戶顯示哪些通知,並可能在後臺加載一些數據。

從廣義上講,你需要:

  • 遠程通知寄存器時,你的應用程序啓動(通常在應用程序:didFinishLaunching :)
  • 當你收到通知的令牌,將其發送到Web服務器它會向你發送通知(這個令牌可以改變,所以一定要在你啓動應用程序時一直髮送給你的web服務器)
  • 當新的內容可用時,你的web服務器可以使用令牌發送一個有效載荷到你的應用程序(你選擇的語言可能已經有了一個庫,例如,如果你使用Ruby ,有Houston
+0

對於遠程通知,您必須擁有Apple Developer會員資格? –

+1

我這麼認爲。您需要能夠配置推送通知證書,這隻有在註冊成員資格時纔有可能。 –

5

AFAIK在後臺(製作過程)中沒有辦法在180s後運行NSTimer。

編輯:如果您啓用後臺模式,您可以獲得最多10分鐘。你可以學習更多,例如。 here

+0

如何啓用後臺模式?當我啓用後臺模式時,我可以設置一個每10分鐘調用一次函數的計時器? –

+0

廣告1)請參閱附加鏈接。廣告2)tldr:不 - 你有10分鐘(最多)做你所有的東西。也許通知可以解決你的問題。 –

3
Write this both methos in your Appdelegate.m file 

//For Objective c 
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
      [self TimerMethod]; 
    } 
    -(void)TimerMethod 
    { 
     //Every 30 minute call the functions 
     _timer=[NSTimer scheduledTimerWithTimeInterval:1800.0f target:self selector:@selector(updateMethod:) userInfo:nil repeats:YES]; 
    } 

    - (void)updateMethod:(NSTimer *)theTimer 
    { 
     NSLog(@"Timer set now"); 
    } 

//For Swift 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool 
{ 
    self.TimerMethod() 
} 

func TimerMethod() 
{ 
     var timer = NSTimer.scheduledTimerWithTimeInterval(1800, target: self, selector: "updateMethod", userInfo: nil, repeats: true) 
} 

func updateMethod() 
{ 
    print("set timer now") 
} 
+0

這不是Swift語言! –

+0

好吧,等待我將添加另一個代碼 – imjaydeep

+1

現在看到我添加swift代碼 – imjaydeep