觉得一篇不错的文章,简单翻译了一下。

原文地址

作者博客首页


推送通知是再次吸引用户打开app的一个重要手段。与直接打开app相比,用户更倾向于通过通知直接进入app丰富多彩的功能,所以不管是安卓用户还是iOS用户,推送通知已经成为用户与自己手机之间进行互动的主要方式之一。

那么,锁屏时候的通知栏就理所当然成了争夺用户时间和注意力的主要战场。因此,从用户那里获取到发送通知的权限,并且一直拥有这个权限,已经成为了所有app的用户战略中至关重要的一个方面。

在你获取到这些通知之前,你必须请求用户给予你推送这些通知的权利。

在安卓上这点是比较爽快的:许可申请被添加到应用的AndroidManifest.xml中,并在应用程序安装的时候通过列表展示出来。
在iOS上,就有一点麻烦了。你必须通过在应用的代码里触发授权要求。而且,获取用户授权的时候,会弹出一个下面的一个对话框。

iOS这种特定的授权方式,使得用户在第一次授权请求弹出的时候选择同意是非常重要的。一旦用户点击了不允许,想要再次允许,就需要操作好多步(到设置里面去)才能完成重新授权。所以一旦不允许,是几乎不会再次允许授权的,这是一个不可逆的过程。

所以,你必须尽自己的一切可能,让用户看见系统授权ALertView的第一眼点击“允许”。

虽然每个app是不同的,但让用户最大程度的接受授权请求的通常的有效方法是相同的:

  1. 在确定需要的时候再去询问用户授权。这样你就可以有效的给用户解释同意授权带来的好处。
  2. 在系统弹出授权对话框之前,给用户展示一个过渡的授权对话框。这个对话框是我们自定义的,可以用来判断用户的对授权的真实意愿。

如果用户拒绝了你自定义的那个对话框,那么也就有很大可能同样拒绝那个真正的系统授权。这个时候,你就可以不触发系统的授权。 通过这种方式,当以后用户想要点击“允许”的时候,你仍然没有失去再次尝试获取授权的机会。另一方面,如果用户同意了那个我们自定义的选择框,那么同意接下来系统真正的授权对话框的概率非常高,所以这个时候立即弹出系统真正的对话框是一个不错的选择。

诚然,这样做,在授权成功的过程中,会导致给用户展示连续的两个对话框。但是,按照我们以往的经验,在实际情况下,对广大用户来说这不会是一个困扰。

采用这种方法比你想象的还要容易。下面是使用UIAlertController一个例子的代码片段:

UIAlertController *alertController =
[UIAlertController
alertControllerWithTitle:@"Let Us Send You Push Notifications?
message: @"We'll only notify you of content that's interesting and relevant to YOU."
preferredStyle:UIAlertControllerStyleAlert];UIAlertAction* denyAction = [UIAlertAction
actionWithTitle:@"No, Thanks"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
softPushDenied = YES;
[self saveToUserDefaults:@(1) forKey:@"softPushDenied"];
[alertController dismissViewControllerAnimated:YES completion:nil];}];UIAlertAction* allowAction = [UIAlertAction
actionWithTitle:@"Yes, Please"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
[alertController dismissViewControllerAnimated:NO completion:nil];
[self requestPushPermissions];}];[alertController addAction: denyAction];
[alertController addAction: allowAction];[self presentViewController:alertController animated:YES completion:nil];-(void)requestPushPermissions {
UIUserNotificationSettings *settings =
[UIUserNotificationSettings
settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound
categories:nil];[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}

最后的结果看起来会是这样。通过我们的UIAlertController呈现最初的自定义对话框:

如果用户拒绝了我们自定义对话框的授权请求,我们不要冒险去给他们展示的系统真正的对话框,保留我们的机会,稍后再试。

如果,反过来,用户允许了我们的授权请求,我们就应该立即触发系统对话框。

Best of luck with your push notifications!

iOS 推送通知授权请求优化相关推荐

  1. iOS 推送通知及推送扩展

    概述 iOS中的通知包括本地推送通知和远程推送通知,两者在iOS系统中都可以通过弹出横幅的形式来提醒用户,点击横幅会打开应用.在iOS 10及之后版本的系统中,还支持通知扩展功能(UNNotifica ...

  2. iOS 推送通知详解

    这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 ...

  3. “iOS 推送通知”详解:从创建到设置到运行

    "iOS 推送通知"详解:从创建到设置到运行 转自 http://www.csdn.net/article/2012-02-18/311976 这是一篇编译的文章,内容均出自Par ...

  4. IOS推送通知开发流程

    最近开发IOS的推送通知,现把流程及遇到的问题整理一下: 一.证书的准备工作 1.在开发电脑MAC上申请证书 打开钥匙串访问 选择从证书颁发机构请求证书 这里的邮箱账号写你自己的,常用名称可以随便写 ...

  5. ios推送通知之ios推送证书的申请和使用配置

    很多人初次接触推送通知,不知道怎么去申请ios推送证书和配置推送. 很多人犯的错误就是用推送证书p12去打包ipa,推送不是用来打包的,下面详细介绍ios推证书的申请和配置使用. ios推送证书分为测 ...

  6. IOS推送通知的实现步骤

    推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说来,当要显示消息或下载数据的时候, ...

  7. iOS 推送通知的样式总结

    推送通知 推送通知的作用 推送通知的呈现效果 推送通知的呈现效果总结 推送通知的呈现效果设置 1. 推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification ...

  8. iOS 推送通知 客户端实现

    关于推送,已经有很多文章了,我写一下自己在做推送时候的一些个人理解,对于如何取证书还有服务器实现网上有现成代码,不在累述.如果有说的不对的地方,希望大家指正. 首先: -(BOOL)applicati ...

  9. 向 iOS 设备发送推送通知

    向 iOS 设备发送推送通知 直接向 iOS 应用程序提供丰富的内容 Michael Yuan 2012 年 5 月 25 日发布 背景 SMS 和 MMS 消息是由无线运营商通过设备的电话号码向特定 ...

最新文章

  1. 输入空格hdu - 1010 - Tempter of the Bone
  2. 【配置映射】—Entity Framework实例详解
  3. 解释ROM、RAM、SRAM、DRAM与FLASH在使用上的区别及其原因
  4. AAAI 2021 | 学习截断信息检索排序列表
  5. 10.4 route:显示或管理路由表
  6. SQL和PL/SQL的性能优化之四---联结与子查询
  7. kaggle为什么总是难以拿到金牌
  8. html中after对应的样式怎么写,css – 如何创建内联样式:before和:after
  9. Nuc972使用NandFlash时,uboot所需要的改动
  10. python僵尸进程和孤儿进程_Python Web学习笔记之并发编程的孤儿进程与僵尸进程...
  11. 面试必选要掌握的知识(持续更新)
  12. 邮局只能寄指定大小的箱子
  13. Shell笔记5——函数的知识与实践
  14. 工程师高级职称计算机考试成绩查询,高级工程师职称查询
  15. 乘坐民航客机能带多大容量充电宝
  16. [视频编码] BD-rate和BD-PSNR
  17. 基于SSM框架的借阅图书管理系统
  18. 20169220 网络攻防实践 第二周学习总结
  19. 开发技术-git修改用户名和邮箱地址
  20. Asp.net Core 6.0 使用EF DB First 连接mysql

热门文章

  1. 华硕服务器 系统安装win7系统,华硕主板u盘装win7系统 华硕主板装u盘系统安装win7...
  2. 2009年广东省行政测试真题
  3. Unity 休闲游戏体力值恢复
  4. Object.assign()详解
  5. 计算机网络安全外文文献,外文文献-计算机网络安全和防范
  6. uni-app项目的收获及心得体会
  7. Anaconda安装老版本tensorflow
  8. 学而不思则罔,学而不思则殆-年终总结
  9. 双电阻差分电流采样_电池应用中的电流采样电阻设计
  10. Discuz!论坛教程之设置帖子被评分后自动提升主题