我不需要你的许可

原文地址:http://blog.danlew.net/2014/11/26/i-dont-need-your-permission/

在Android上从一个用户角度得到授权是棘手的。通常你只想做一些次要的或者无伤大雅的事情(用一个联系人信息提前填充表格),但是你必须要求给你比通常的更多的真正的许可(访问所有联系人详细信息)。

用户对你持怀疑态度是可以理解的。如果你的app是闭源的,那么他们就没有验证的方式你是否正在下载他们的所有的联系人到它们的服务器。甚至如果你解释这个许可,人们也不会相信你。在过去,为了避免用户不信任,我选择不实现那些容易取得的特性。

也就是说,困扰我的一件事情是你有时候不得不请求授权来做一些事情。

恰当的例子:android.permission.CALL_PHONE。你需要它从你的app中启动打电话,是吗?你打电话不就是这样吗?

Intent intent = new Intent(Integer.ACTION_CALL);
intent.setData(Uri.parse("12345678910"));
startActivity(intent);

错了!原因是你需要许可,因为在没有用户操作的情况下,在任何时候你可以通过代码开启一个phone call。如果我的app有了这个许可,那么我就能在每天的早上的半夜3点拨打1-900-CAT-FACTS而且你可以做到神不知鬼不觉。

做这个更正确的方式是要么使用ACTION_VIEW或者ACTION_DIAL:

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("12345678910"));
startActivity(intent);

这个解决方案的漂亮之处就是你不需要许可。你不需要的原因是因为代替开启一个通话,它使用前面的电话号码运行了一个Dialer应用程序,但是还是任然要求用户需要点击"拨打"来开启通话。说实话,总之这感觉像是一个更好的系统;我不想app让我大吃一惊。

另一个例子:当我的妻子抱怨为了在她的电话上得到导航需要点击很多次,我就为我的妻子写了个Quick Map。她所想要的就是她的联系人列表和导航到它们的一种方式。

你也许认为我为了写这个app需要为了获取所有联系人得到许可:又错了!如果你看了源代码,你将看到为了取出一个地址,使用了ACTION_PICK来运行另一个app:

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(StructuredPostal.CONTENT_TYPE);
startActivityForResult(intent,1);

做了这个不仅仅意味着你获得了许可请求,它也意味着我的app不需要任何UI。它完全利用你要选择的联系人的应用程序的UX。

Android的最酷的其中之一是Intent系统,因为它意味着不需要我到处写代码。其它的应用程序能注册它们自己取得期望的指定的数据片段,像电话号码,短信或者联系人。如果必须都由我来做它,那么我的应用程序可能很多时候就是一个bug程序,因为那需要很多的工作量。

这个系统的另一个好处是在我没有请求它们的情况下我自己能利用那些其它的app的许可。本质上也就是所有上面提到的。然而拨打一个app需要能make call的许可,我的Intent打开这个拨打器,但是不拨打。总而言之,用户相信拨打器来make call而不是我的app。

这个故事的寓意是在你考虑添加许可以前,你应当至少详细了解 Intent文档来看看是否有其它的请求另一个app的方式来为你做这件事。如果你真的想深入了解,你能学习更多错综复杂的许可系统详述,它包含了取得许可更多的方式。

使用更少的许可将不仅仅让你得到更多用户信任,而且用户将有更好的体验,因为他们也将变得使用他们首选的app。

时间: 2024-10-11 17:45:36

我不需要你的许可的相关文章

M60许可的下载说明

之前10月份的时候写过一个M60的基本搭建手册,圈子内很多朋友开始都在测试或者上线M60,我个人觉得如果你看过我之前写的M60搭建手册,再去看看官方的PPT和文档,测试或是上线应该问题不大. 前几天遇到一个朋友测试M60的时候LIC下载的时候出现点问题,由于之前写M60搭建里面遗漏了这点,今晚有时间补全上去. 在你注册M60账号的时候,英伟达就会给你发送邮件,你必须使用这个账号去申请临时或者正式LIC,首先Link一下,需要修改一下注册账号的密码复杂度. 2.完成后登陆到许可下载界面. 3.首先

iOS开发者程序许可协议

请仔细阅读下面的许可协议条款和条件之前下载或使用苹果软件.   这些条款和条件构成你和苹果之间的法律协议. 目的 你想使用苹果软件(如下定义)来开发一个或多个应用程序(如下定义)Apple-branded产品运行iOS. 苹果愿意授予您有限的许可使用苹果软件开发和测试您的应用程序在本协议规定的条款和条件. 开发的应用程序在此协议下可以分布在四个方面:(1)通过应用程序商店,如果选择苹果,(2)通过VPP / B2B项目网站,如果选择苹果,(3)在一个有限的基础上使用注册设备(如下定义),和(4)

267家已获第三方许可机构名单查询

以下为为您收录的全部267家已获第三方许可机构名单. 也可到中国人民银行查询 只玩正规的pos机 http://www.pbc.gov.cn/zhengwugongkai/127924/128041/2951606/1923625/1923629/index.html 许可证编号 公开信息名称 生成日期 Z2000133000019 支付宝(中国)网络技术有限公司 2014年4月30日 Z2000231000010 银联商务有限公司 2013年5月21日 Z2000311000013 资和信电子

托管代码保护和许可授权管理系统软件IntelliLock

IntelliLock控件是一个能用于控件与应用程序许可授权的100%托管的先进解决方案.与.NET Reactor提供的基于源代码保护的授权许可系统不同,IntelliLock选择了以100%托管的方式应用许可与保护功能.以这种方式,用户可以无需使用附加文件即可创建单一文件.其灵活的集成策略使得用户可以将完全的许可授权集成入任意已存在的系统中.IntelliLock支持.NET Framework 1.1, 2.0, 3.0 以及 3.5,其也全面支持Compact Framework 2.0

一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 以下是上述协议的简单介绍:BSD开源协议BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布. 但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己

Syncfusion的社区许可及免费电子书和白皮书

今晚由于要忙于其他事情,就简单的给大家推荐一个第三方组件库.特别注明:这是我义务为这家公司打广告.毕竟我从他们公司收获了很多知识. Syncfusion是一家微软生态下的第三方组件/控件供应商,算是后起之秀.我最早知晓这家公司,是他们在很早的时候推出过一套免费的WP7组件包.由于他们是以WP7起家的,所以他们控件的Metro或称Windows风格做的比较漂亮.后来,我对其持续关注,是之前为一个SaaS系统选型前端控件包,从而仔细研究了他们家的Essential Studio for JavaSc

授予组件和控件许可权限

本随笔主要参考了MSDN 一.简单的一个例子 To enable licensing for your component or control 1.Apply a LicenseProviderAttribute to the class. 给类添加  LicenseProviderAttribute 特性. 2.Call Validate or IsValid in the constructor. 在构造函数中调用Validate函数. 3.Call Dispose on any gran

Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议

在上一篇中,留下了许可协议的问题,目前已经解决.感谢网友武全的指点! 问题 一般我们是用WixVariable 来设定许可协议.如下所示: <WixVariable Id="WixUILicenseRtf" Value="license.rtf" /> 但在多语言中我们写成下面这样是不识别的.它会被直接当成文件路径,而报错,找不到文件. <WixVariable Id="WixUILicenseRtf" Value="

开源许可协议

开源许可协议的由来    自由软件/开源软件是自由的,免费的,源代码开放的,我们可自由下载安装和使用.同时,为了维护作者和贡献者的合法权利,保证这些软件不被一些商业机构或个人窃取,影响软件的发展,开源社区开发出了各种的开源许可协议.    人们不太容易区分一个软件是否真正开源的根本原因,在于开源研究院认可的许可有60多种.但在这60多种许可中,有一个许可明显主宰着开源世界.迪博纳说:“GPL(General Public License,通用性公开许可协议)是当今开源世界中最重要的许可.”根据迪

Ansible-Tower快速入门-5.导入许可【翻译】

导入许可 Tower需要一个有效的许可才可以正常运行,当你输入你的相关信息得以下载tower时,你应该有接收到一封包含许可的email邮件,你也可以直接从ansible获取许可. 如果你不能获取许可或接收的许可有问题,请访问http://ansible.com/license 查看我们的免费和付费许可选项(包括免费试用许可)或通过 http://support.ansible.com/ 联系ansible支持 当你启用一个没有有效许可的tower时,你会看到如下图所示的对话框 将你从ansibl