iOS 推送通知授权请求优化

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

原文地址

作者博客首页


推送通知是再次吸引用户打开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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值