推送通知设置策略



我的应用程序向用户发送推送通知。它包括一个设置,供用户指定她希望接收通知的时间。

当应用程序第一次打开(并接受推送通知)时,我会用用户的推送令牌和默认时间设置向服务器写入一条记录。每当更改时间设置时,我都会类似地更新设置。

像一个优秀的APNS公民一样,我也会每晚检查删除应用程序或禁用推送通知的用户的过期代币。我从数据库中删除了这些令牌。这就是我的问题所在。

  1. 如果用户禁用了设置中的通知,重新打开我的应用程序,并更改了"时间"设置,我会照常将设置写入服务器。我的应用程序不知道用户以前关闭了通知。用户不会收到通知,因为APNS会拒绝它们,但我仍然会错误地将它们发送到推送服务器。有没有办法让应用程序知道推送被禁用,从而避免将设置发送到我的服务器(或者更好的做法是,允许我隐藏设置UI,而是显示一条消息,告诉用户推送已禁用)?或者我还能怎么处理?

  2. 第一天,用户安装我的应用程序,我的服务器收到令牌。第二天,她禁用了设置中的推送功能——当晚晚些时候,我收到了过期代币的通知,并将其从数据库中删除。第三天,她从设置中重新启用推送功能。我没有收到任何通知(因为我的应用程序甚至没有打开),用户也不会收到她期望的通知。对此我能做些什么吗?

应用程序可以检查推送通知的当前状态:

您可以使用UIApplication的enabledRemoteNotificationTypes属性或NSApplication的enabletRemoteNotificationType属性查询当前启用的通知类型。

我建议当你从苹果的反馈服务获得设备令牌时,不要从你的DB中删除该令牌。相反,请将其标记为非活动状态。

这样,即使应用程序禁用了推送通知,您也可以允许用户更新交付时间设置。

当应用程序启动时,您应该检查推送通知是否已启用,如果已启用,请调用服务器以确保设备令牌的状态处于活动状态。

现在,如果用户禁用推送通知并稍后启用(在您的服务器已经从反馈服务获得设备令牌并取消激活该令牌之后),那么下次启动应用程序时,您将通知服务器激活设备令牌。

最新更新