帮助与文档

> >

一、Android 授权以及授权页面自定义

ShareSDK的授权分为“手动授权”和“自动授权”。前者是指显式调用ShareSDK的授权代码来执行授权操作,后者是执行ShareSDK的操作前不考虑具体平台是否已经完成授权操作,直接调用其对应方法执行操作(如分享操作),ShareSDK内部会根据平台数据库中的数据判断其是否已经完成授权,若是未授权或授权信息已经失效,则自行启动授权流程,执行授权。自动授权于开发者是透明的,但是于用户来说依然存在。
不管您选择的是“手动授权”还是“自动授权”,授权都是您接触ShareSDK的第一个操作。
对于大部分的应用来说,手动授权是没有必要的,但是如果您只是想做一个“账号系统”,或者是说您的应用不需要注册,只需要是微博的用户,就能登录,那么这个方法还是十分有用途的。

二、手动授权

下面是新浪微博授权操作的例子:

调用authorize方法,会弹出一个基于ShareSDKUIShell的授权页面,填写账号和密码以后,会执行授权操作。这个方法的操作回调paListener并不实际带回什么数据,只是通过回调告知外部成功或者失败。但是每一个平台都具备一个PlatformDb的成员,这里面存储了此平台的授权信息。可以参考如下章节7的平台数据库的操作的说明或查看获取授权用户资料章节,通过方法getToken、getUserId等方法,获取授权用户在此平台上的授权信息。并由此建立“账户系统”。

以上是授权新浪微博的例子,如果想授权其他的第三方平台,只需要通过修改平台的名称。

平台的名称可以在assets下shareSDK.xml文件里面对应获取找到。如下所示:SinaWeibo、QZone等

三、自动授权

自动授权就是直接无视授权操作而调用其他的操作(如关注或者分享)。在自动授权下,授权操作对开发者而言是透明的,它由ShareSDK内部控制,开发者没有调用授权的代码,也没有办法接收到授权的结果。比方说如果开发者执行关注,则发起时调用的方法是关注,操作回调中得到的结果(不管成败)也是关注。
关于这些操作的例子,可以参考其对应的章节。

 

四、SSO (Single Sign-On)

SSO授权方式,简单来说就是使用目标平台客户端来完成授权。

使用了SSO授权后,有客户端的都会优先启用客户端授权,没客户端的则任然使用网页版进行授权。

这里需要注意的是新浪微博客户端授权是需要用户在开发者平台(网址:http://open.weibo.com)申请的应用用过了新浪的审核。而且要通过keystore进行签名打包测试。注意打包所用的keystore上的md5签名、项目的包名要与新浪开发者平台上填写的签名与包名一致。对比方式如图:

平台截图:

QQ截图20141109164024

 

项目包名:

02

keystore的md5签名:

QQ截图20141109163959

 

五、自定义授权页面

本节介绍的是如何自定义“Web授权页面”,由于SSO授权方式使用的是目标平台的客户端,ShareSDK无法修改其页面,因此不在介绍范围之内。
ShareSDK的所有GUI都基于ShareSDKUIShell,但是ShareSDKUIShell只是一个容器,真正显示授权页面主体和逻辑是几个FakeActivity的子类。这些控件在ShareSDK之外是不能修改的,但是考虑到很多开发者希望可以修改这个页面的布局、逻辑等等代码,因此ShareSDK为此提供了一个自定义授权页面的方法,操作如下:
1)打开AndroidManifest.xml,并如下修改ShareSDKUIShell的注册信息:

其中的cn.sharesdk.demo.MyAdapter是一个继承自cn.sharesdk.framework.authorize.AuthorizeAdapter的类。开发者可以根据自己的需要,修改Adapter为任何类名和路径,但是一定要继承自AuthorizeAdapter。当然,如果您不想修改授权页面,可以不设置这个Adapter。
2)创建MyAdapter这个类,然后添加自定义代码,如(修改授权页面标题栏的文字):

上面的onCreate、onResum、onStop、onDestroy等方法都在ShareSDKUIShell的生命周期不停时段被调用,如onCreate、onDestroy分别在授权页面被创建(但还没有显示),以及即将被关闭时被调用。也就是说可以通过这些方法参与授权页面的生命周期。而getPlatformName、getTitleLayout和getWebBody分别返回授权平台的名称、授权页面标题栏控件和授权页面主体部分的WebView,开发者可以通过平台名称和控件实例,修改整个页面的布局甚至行为。
请注意,注册在Adapter下的AuthorizeAdapter子类不能被混淆!否则ShareSDK无法找到这个类
更多关于自定义授权页面的操作技巧,请参考ShareSDK BBS上的相关帖子。

六、平台数据库的操作

ShareSDK将每一个平台的授权数据都缓存在SharedPreferences中,并且相互独立。如果您希望获取任何一个平台的授权数据,可以像下面这样子做:

不同平台都会缓存accessToken、expiresIn、UserId、nickname等信息,分别表示授权的Token、授权Token的有效时间、用户在此平台上的ID、用户的昵称等信息。可以通过getToken()或者setToken()进行操作。此外,开发者还可以通过直接get()某个字段的办法,获取其数据,如上面通过“nickname”字段获取到用户的昵称。
ShareSDK同时还允许开发者使用“exportData”和“importData”两个方法,批量导出和导入PlatformDb中的数据。开放这两个方法的目的是:部分应用具备多用户系统,如果同一设备上不同时期要登录多个账户,那么他们需要备份上一个用户的资料。ShareSDK并不设置多用户系统,但是用户可以通过登录不同用户的时候,批量导出旧用户的资料,然后再登录新用户,直到新用户登录成功后,再重新导入旧用户登录数据,实现其多用户系统功能。

七、删除授权信息

由于ShareSDK所有的授权数据都存在PlatformDb中,所以“用户是否”授权,和“取消授权(清除授权信息)”的操作依据其实PlatformDb。在ShareSDK中,判断此平台是否授权的方法是isValid,而取消授权的方法是removeAccount,下面的代码演示客户端判断是否已经授权,如果授权就删除授权资料,否则就执行授权:


 

2 4