我的应用发送用户推送通知。它包括一个设置,供用户指定她希望收到通知的时间。
首次打开应用程序(并接受推送通知)时,我会使用用户的推送令牌和默认时间设置将记录写入服务器。每当时间设置改变时,我同样更新设置。
就像一位优秀的APNS公民一样,我也会每晚检查已删除应用或禁用推送通知的用户的过期令牌。我从我的数据库中删除这些令牌。这就是我的问题。
如果用户从设置中禁用了通知,重新打开我的应用,并更改了“时间”设置,我会按照惯例将设置写入我的服务器。我的应用程序不知道用户以前关闭过通知。用户将不会收到通知,因为APNS会拒绝它们,但我仍然会错误地将它们发送到推送服务器。有没有办法让应用程序知道推送被禁用,因此不要将设置发送到我的服务器(甚至更好,允许我隐藏设置UI,而是显示一条消息告诉用户推送被禁用)?或者我怎么办呢?
在第一天,用户安装我的应用程序,我的服务器收到令牌。在第二天,她禁用了设置中的推送 - 那天晚上我注意到过期的令牌并将其从我的数据库中删除。在第三天,她重新启用设置推送。我没有收到任何通知(因为我的应用程序甚至没有打开),用户将不会收到她期望的通知。我能做些什么吗?
答案 0 :(得分:2)
该应用可以检查推送通知的当前状态:
您可以使用UIApplication的enabledRemoteNotificationTypes属性或NSApplication的enabledRemoteNotificationTypes属性查询当前启用的通知类型。
我建议您从Apple的反馈服务获取设备令牌时,不要从数据库中删除该令牌。而是将其标记为非活动状态。
通过这种方式,即使针对应用停用推送通知,您也可以允许用户更新投放设置的时间。
启动应用程序时,您应该检查推送通知是否已启用,如果是,请调用服务器以确保设备令牌的状态处于活动状态。
现在,如果用户禁用推送通知并稍后启用它们(在服务器已从反馈服务获取设备令牌并取消激活令牌之后),则下次启动应用时,您将通知服务器激活设备令牌。