我需要始终知道用户在推送通知设置中选择了哪些选项.
(选项包括 - 警报,声音和徽章)
所以,当我的应用程序启动时,我打
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
Run Code Online (Sandbox Code Playgroud)
并检测用户选择的内容.
但是,如何在应用程序生命周期内检测用户是否稍后更改设置?
是否有一些委托方法在此设置发生更改时被调用?
iphone objective-c appsettings push-notification apple-push-notifications
对于iOS8,有选项,当iOS缓存推送通知权限为24小时,重新安装后我将不会收到推送通知提醒.
有解决方法:
重置iOS上的推送通知权限警报
第一次启用推送的应用程序注册推送通知时,iOS会询问用户是否希望接收该应用程序的通知.一旦用户响应此警报,除非设备已恢复或应用程序已卸载至少一天,否则不会再次显示该警报.
如果您想模拟首次运行的应用,可以将应用程序卸载一天.您可以通过以下步骤实现后者而无需等待一天:
从设备中删除您的应用.完全关闭设备并重新打开.转到设置>常规>日期和时间,并将日期设置为一天或更长时间.再次完全关闭设备并重新打开.资料来源:https: //developer.apple.com/library/ios/technotes/tn2265/_index.html
问:但是对于iOS9 +没有缓存的推送权限,重新安装后我每次都收到警报.有没有选项可以将我的选择缓存24小时并在重新安装后使用它?
当您的iPhone收到WhatsApp/Telegram推送通知时,例如
wife:
"buy pizza"
Run Code Online (Sandbox Code Playgroud)
问题1:应用程序是否必须自行下载/接收.这是手机上弹出的横幅必须为自己下载+我的Whatsapp/Telegram必须再次自行下载?
我的朋友回答说:
推送通知可以将消息作为有效负载.您的应用可以提取并动态插入到对话中而无需另外请求 - 我之前已经这样做了.让它感觉更加快捷.缺点是您不能保证推送将以正确的顺序(或根本没有)到达.
但我不相信,从语义的角度来看,推送通知不应该真正更新你的应用程序.如果他们这样做将是一种滥用......他们应该只通知您的应用程序更新,然后允许您通过下载任何已提供的新内容来自行更新.
因此,要查看顶级公司及其应用是否正在应用我的朋友建议我使用3个应用(Gmail,WhatsApp,Telegram)进行了一些实验:
然后我有人给我发了一条消息/电子邮件:这是我的结果:
电报::我收到警报(发件人+第一行).但是一旦我打开应用程序(或点击通知),它就没有我的新消息或任何东西.
但是,如果允许Telegram访问互联网...它会在后台下载消息...即如果我遵循以下顺序:我是wifi或没有互联网限制的蜂窝数据 - >收到通知 - >转互联网完全关闭,但然后转到应用程序:我会在那里看到完整的消息/正文.
Gmail:我收到提醒(有预览主题/发件人/正文)但是一旦我打开应用程序,它就没有我的新消息或任何东西.
如果Gmail应用程序被允许访问互联网......那么与Telegram相反:只有在打开应用程序本身之前,它才会下载/更新Gmail中的电子邮件.我猜Gmail没有content-available设置,1但Telegram设置为1
WhatsApp:我什么都没得到.
没有互动发生在接到通知......这只有当应用程序被下载情况本身.
我的结论是:
没有互动发生在接到通知......这只有当应用程序被下载情况本身独立于有效载荷的到来.
Gmail和Telegram正在进行冗余下载,基本上不够智能,我的朋友建议或者没有收到电子邮件/消息的风险太大,最好安全一点:thinking_face:
问题2:这个结论是否正确?
apple-push-notifications ios swift remote-notifications silent-notification