2015-04-02 161 views
11

我們可以在IOS應用程序中使用無聲本地通知嗎?在後臺進行一些數據處理,無需用戶與其交互。無聲本地通知IOS

我想要做的是創建一個無聲的本地通知,每隔早上8點在用戶收到它時觸發我想要做一些數據處理並重新創建一個用戶可以用新數據看到的新數據I在我看到第一個無聲的本地通知後處理。

我試圖儘可能避免使用推送通知。

+1

當本地通知被觸發時,您將無法控制應用程序。這只是向用戶直觀顯示的內容。 – 2015-04-02 17:18:57

+1

添加到上面,只有遠程通知(推送)可以讓你做你想做的事情。 – Ollie 2015-04-02 18:47:09

+0

本地和推送通知在這個意義上都以相同的方式工作。除非你打開它們,否則它們什麼也不做。 – Kex 2015-04-02 19:15:12

回答

4

您可以在iOS的後臺接收無聲通知,但您需要一臺服務器才能實際發送通知。

要做到這一點,你能在你的目標的能力選項卡的Remote notifications背景模式:

Screenshot of Background Modes settings

然後你在application:didFinishLaunchingWithOptions:

UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeNone categories:nil]; 
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; 

註冊推送通知在等待用戶允許您的應用程序發送推送通知時,您將收到設備令牌:

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken; 

如果出現問題,故障處理程序將被調用:

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError: 

您發送deviceToken到你的服務器,並告訴它的設備的本地上午8時發出無聲推送通知該deviceToken

該設備將有一個名爲以下應用程序的委託方法:

  - (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
     fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; 

,你就可以做你的數據處理。

簡單!

當你完成後,不要忘記調用完成處理程序!

+0

當你說服務器。這是一個非IOS程序,它將通知發送給設備,比如計劃任務或某種排序?或者我可以在我的IOS應用程序中做所有事情, – 2015-04-02 20:45:19

+1

這是一個非iOS程序,例如作爲EC2上的cron作業或類似的東西運行。 – 2015-04-02 20:46:26

+1

所以你正在使用遠程通知。但我試圖擺脫遠程通知,我的問題是關於本地通知。 – 2015-04-09 21:26:56