Cluster 可重用的预权限工具,允许开发者通过自己的对话框请求用户对照片或联系人的访问权限,在系统请求之前。这是基于 Cluster 的文章 请求 iOS 权限的正确方法。
在 iOS 上,当您的代码尝试访问相册或地址簿时,系统会自动向用户显示一个警告。
如果用户表示“不允许”,那么您将失去唯一的机会来获取该权限。用户将不得不在您的应用之外进行五个步骤的过程以重新启用访问权限,而这几乎是不会发生的。
通常用户甚至没有预料到访问警告,并且会习惯性地点击“不允许”。这对您和用户来说都是一个双输的局面。
在 Cluster,我们在使用自己的 UI 请求权限方面取得了很多成功。
仅就照片而言,在有预权限对话框拒绝访问的这些人中,有 46% 的人在以后更好的时间请求授权时都同意了。
此实用程序简单地将一个“预权限”警告包装在您的代码中(如果需要的话)。例如,当您需要请求照片访问时,此实用程序实际上只是在请求用户两次。
尽管两次询问可能看起来烦人,但我们几乎在 Cluster 中完全消除了用户点击“不允许”的可能性,留下了未来再次赢得他们的机会。并且值得一提的是,在 现场用户测试 中,当第二个对话框出现时,没有一位测试对象犹豫(或表现出困惑)。
将 ClusterPrePermissions.h
和 ClusterPrePermissions.m
添加到您的项目中。
git clone
下载最新代码。ClusterPrePermissions.h
和 ClusterPrePermissions.m
拖放到项目中。确保在询问是否从项目外部提取代码归档时选择复制项。#import "ClusterPrePermissions.h"
添加它。CLPermissions 会检查照片和联系人的授权状态,并给出一个块回调,将返回结果。如果授权状态是“未确定”,则在实际系统请求之前,实用程序将显示一个可配置的 UIAlertView
,询问“预授权”。
如果授权状态已经不可改变,您的块将被回调。您可以检查 userDialogResult
和 systemDialogResult
来查看发生了什么。如果两者都是 ClusterDialogResultNoActionTaken
,则这意味着系统已经允许或拒绝了访问。
ClusterPrePermissions *permissions = [ClusterPrePermissions sharedPermissions];
[permissions showPhotoPermissionsWithTitle:@"Access your photos?"
message:@"Your message here"
denyButtonTitle:@"Not Now"
grantButtonTitle:@"Give Access"
completionHandler:^(BOOL hasPermission,
ClusterDialogResult userDialogResult,
ClusterDialogResult systemDialogResult) {
if (hasPermission) {
// Continue with your code here
} else {
// Handle access not being available
}
}];