静默本地通知 IOS

Posted

技术标签:

【中文标题】静默本地通知 IOS【英文标题】:Silent Local Notification IOS 【发布时间】:2015-04-02 17:01:27 【问题描述】:

我们可以在 ios 应用程序中设置一个静默的本地通知吗?它在后台进行一些数据处理,而无需用户与之交互。

我想要做的是创建一个静默的本地通知,它在早上每 8 点触发一次,在用户收到它之后,我想做一些数据处理并重新创建一个新的通知,用户可以使用我处理的新数据看到它在我看到第一个无声的本地通知之后。

我尽量避免使用推送通知。

【问题讨论】:

当本地通知被触发时,您将无法控制应用程序。它只是直观地展示给用户的东西。 除此之外,只有远程通知(推送)才能让你做你想做的事。 本地和推送通知在这个意义上都以相同的方式工作。除非您打开它们,否则它们不会做任何事情。 我也在找它。所以不可能吗? 不,本地通知是不可能的。对于这种情况,您必须使用远程通知。 【参考方案1】:

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

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

然后你在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;

您将能够进行数据处理。

简单!

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

【讨论】:

当您说服务器时。它是一个非 IOS 程序,它向设备发送通知,如计划任务或某种方式?或者我可以在我的 IOS 应用中做所有事情吗, 它是一个非 iOS 程序,例如在 EC2 或类似的东西上作为 cron 作业运行。 所以你正在使用远程通知。但我试图摆脱远程通知,我的问题是关于本地通知。 对不起,我的错误。本地通知不能无声。 我真的很喜欢这个答案,因为我希望我可以默默地做一个本地通知。但是,您不能,因此通过此答案,我能够确切地看到如何获得所需的静默通知。再次感谢!

以上是关于静默本地通知 IOS的主要内容,如果未能解决你的问题,请参考以下文章

iOS 静默通知互联网连接

iOS 后台获取本地通知

iOS静默推送通知在后台状态下每次都不会触发

当应用程序处于终止状态时,iOS 静默推送通知不会收到

iOS 推送通知本地化

在 iOS 中处理静默推送通知的最佳方法是啥