2014-11-21 86 views
1

我正在開發與Web服務器同步的iOS日曆/鬧鐘應用程序。當在服務器上添加活動時,會發送推送通知,以便iOS客戶端可以獲取新數據,並在需要時更新和計劃下一次警報的時間(本地通知)。在後臺任務中安排通知

但是,這隻適用於當客戶端打開應用程序。我希望客戶端能夠收到推送通知,如果需要,可以在後臺重新計劃下一次鬧鐘的時間。

在iOS上這是不可能的嗎?

回答

1

您可以使用後臺抓取進行此操作,操作系統將定期「喚醒」您的應用程序以在後臺執行數據抓取。

首先,爲您的應用啓用後臺抓取功能。在XCode 6中,查看您的項目,然後轉到功能選項卡,打開背景模式,並檢查背景獲取

那麼你就必須實現在App代表的一些代碼:

application:didFinishLaunchingWithOptions:,添加:

[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; 

多久你要「喚醒」系統上面套你的應用程序理想地爲後臺進程。請注意,最終頻率由iOS中的算法決定,因此它可能並不總是如此。

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ 
//fetch code here 
completionHandler(UIBackgroundFetchResultNewData); 

}

以上是實際重寫功能,其在此期間後臺進程的調用。請記住致電completionHandler - 否則可能會降低您的應用下次在後臺運行的可能性(或者如此說文檔)。您可能傳遞給completionHandler的枚舉是UIBackgroundFetchResultNewData,UIBackgroundFetchResultNoData,UIBackgroundFetchResultFailed。根據您的抓取結果使用其中之一。

0

//使用此方法在Appdeleagte

  • (無效)應用:(UIApplication的*)應用didReceiveLocalNotification:(UILocalNotification *)通知{

    [自SHOWALARM:notification.alertBody]; application.applicationIconBadgeNumber = 1; application.applicationIconBadgeNumber =通知。applicationIconBadgeNumber-1;

}

//調用此在appdelagete - (無效)makeNotificationRequest:(UILocalNotification *)notification1 {

[self showAlarm:notification1.alertBody]; 

}

//調用此注資方式在appdelagte - (void)showAlarm:(NSString *)text {

strong text //設置通知並調用此通知方法您的另一個視圖..... [[NSNotificationCenter defaultCenter] postNotificationName:@「uniqueNotificationName」object:self]; // leak

}