静默本地通知 IOS

11

我们能在 IOS 应用程序中拥有一个无声的本地通知吗?它可以在不需要用户交互的情况下进行后台数据处理。

我想做的是创建一个无声的本地通知,每天早上 8 点触发,并在用户接收通知后进行一些数据处理,然后重新创建一个新的通知,用户可以看到我在第一次无声本地通知后处理的新数据。

我尽可能地避免使用推送通知。


1
当本地通知被触发时,您将无法控制应用程序。它只是一些可视化的内容展示给用户。 - Shamas S
1
除此之外,只有远程通知(推送)才能让您实现想要的功能。 - Ollie
本地和推送通知在这方面的工作方式是相同的。除非您打开它们,否则它们不会执行任何操作。 - Kex
1
我也在寻找它。所以这不可能吗? - ricardo
不,使用本地通知是不可能的。您必须使用远程通知来处理这种情况。 - Helen Araya
显示剩余2条评论
1个回答

3

在iOS后台,您可以接收静默通知,但是实际发送通知需要一个服务器。

为此,您需要在目标的“功能”选项卡中启用“远程通知”后台模式:

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:00AM发送静默推送通知到该deviceToken
该设备将会调用以下AppDelegate方法:
         - (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
      fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;

并且您将能够进行数据处理。

简单易懂!

完成时不要忘记调用完成处理程序!


当你说到服务器时,它是一个非IOS程序,可以像定时任务或某种方式一样向设备发送通知吗?或者我可以在我的IOS应用程序中完成所有操作吗? - Helen Araya
1
这是一个非iOS程序,例如在EC2上作为cron作业运行或类似的东西。 - Rhythmic Fistman
1
所以你正在使用远程通知。但我正试图摆脱远程通知,我的问题是关于本地通知的。 - Helen Araya
1
抱歉,我的错误。本地通知无法静音。 - Rhythmic Fistman
1
我非常喜欢这个答案,因为我希望能够静默地进行本地通知。然而,你不能这样做,所以有了这个答案,我能够确切地看到如何获得我需要的静默通知。再次感谢! - Andrew Paul Simmons
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接