Android ShareSDK第三方登录(分别有新浪、QQ、微信、Facebook、Linkedin、Google等等)

来源:互联网 发布:可以追里番的软件 编辑:程序博客网 时间:2024/05/16 09:52

快速集成:

1. 获取ShareSDK的AppKey

         申请ShareSDK的appkey的流程

2. 下载SDK

下载SDK请点这里
下载页如图所示:
下载1
点击下载之后如下图所以,点击下载SDK的下载页,展开平台可以选择其他的第三方平台;demo也是这里下载;下载2
下载完之后的解压目录如图所示:
下载3

3. 快速集成

ShareSDK深受大家喜爱,看下亲爱的用户做的详细说明:Studio集成

第一步:使快速工具进行集成(查看视频教程)

进入ShareSDK解压目录,打开“Share SDK for Android”目录,可以找到“QuickIntegrater.jar”,这个就是快速集成ShareSDK的工具

Windows下

首先确定您已经安装了JDK,并且正确配置了JAVA_HOME和PATH系统变量,此时您可以双击QuickIntegrater启动程序

ssdk_qig_qi_win

Linux/Mac OS下

同样需要先确保已经正确配置了JDK,之后启动终端,cd进入“Share SDK for Android”目录,输入: java -jar QuickIntegrater.jar 可启动QuickIntegrater

ssdk_qig_qi_lin

正确输入项目的名称和包名,勾选需要的集成的平台,然后点击“确定”。
QuickIntegrater会自行产生一个文件夹,复制此文件夹中所有文件到您的项目中覆盖即可。

第二步:配置AndroidManifest.xml(查看视频教程)

下面清单文件的配置是全部的,没有的平台就是不需要配置

1、添加权限

2、添加activity信息

注意: tencent后面的appid要保持和您配置的QQ的appid一致)

3、如果您集成了微信,易信,新浪微博支付宝还需要添加下面回调的activity处理;

4、替换mob后台申请的Appkey与各个平台申请的key

07

第三步:添加分享代码(查看视频教程)

在您的代码中调用此方法,即可打开一键分享功能进行分享

运行效果如下:

07   07

编译并运行后,弹出类似上图的分享列表选择页面,点击后弹出分享窗口,点击发表后就成功发送到社交平台的话说明你已经基本集成成功了。

完整集成步骤

 

API文档

第四步:高级自定义功能

如果上述文档不能满足你的分享需求,请参看高级自定义功能。

2.5.9集成kakao升级说明

 




第三方登录:


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

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

2、手动授权

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

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

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

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

3、自动授权

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

 

4、SSO (Single Sign-On)

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

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

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

平台截图:

QQ截图20141109164024

 

项目包名:

02

keystore的md5签名:

QQ截图20141109163959

 

 

5、自定义授权页面

本节介绍的是如何自定义“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上的相关帖子。

 

6、平台数据库的操作

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

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

7、删除授权信息

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

1
2
3
4
5
6
7
Platformqzone =ShareSDK.getPlatform(this,QZone.NAME);
If (qzone.isValid()){
qzone.removeAccount();
}
qzone.setPlatformActionListener(paListener);
qzone.authorize();
//isValid和removeAccount不开启线程,会直接返回。
0 0
原创粉丝点击