2015-04-02 113 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