2

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

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

就像一个很好的APNS公民一样,我还会每晚检查已删除应用或禁用推送通知的用户的过期令牌。我从我的数据库中删除这些令牌。这是我的问题。

  1. 如果用户从设置中禁用通知,重新打开我的应用程序,并改变了“时间”的设置,我继续写,因为以前一样设置到我的服务器。我的应用程序不知道用户以前关闭了通知。用户将不会收到通知,因为APNS会拒绝它们,但我仍然会将它们错误地发送到推送服务器。有没有什么方法让应用程序知道推送被禁用,因此不要将设置发送到我的服务器(甚至更好,允许我隐藏设置UI,而是显示一条消息告诉用户推送被禁用)?或者我可以如何处理呢?

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

回答

2

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

可以使用的UIApplication的enabledRemoteNotificationTypes财产或修改的NSApplication的enabledRemoteNotificationTypes属性查询当前启用的通知类型。

我建议,当您从Apple的反馈服务获取设备令牌时,不要从数据库中删除该令牌。相反,请将其标记为非活动状态。

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

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

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

+0

谢谢。我去了以上的修改版本。在每次尝试上传设置之前,我都会检查是否禁用了推送,如果是,则拒绝推送。这真的是一个保障 - 虽然我关闭了推送时禁用了设置界面。在启动(和前景)时,我按照建议上传当前设置。我不需要使用这个过程软删除令牌,因为我不允许在未启用推送的情况下修改设置。 –