项目的Demo:

https://download.csdn.net/download/tanghongchang123/9475557


快速集成:

1. 获取ShareSDK的AppKey

         申请ShareSDK的appkey的流程

2. 下载SDK

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

3. 快速集成

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

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

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

Windows下

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

Linux/Mac OS下

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

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

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

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

1、添加权限

1 2 3 4 5 6 7 8 9 10 11 12 < uses - permission android : name = "android.permission.GET_TASKS" / > < uses - permission android : name = "android.permission.INTERNET" / > < uses - permission android : name = "android.permission.ACCESS_WIFI_STATE" / > < uses - permission android : name = "android.permission.ACCESS_NETWORK_STATE" / > < uses - permission android : name = "android.permission.CHANGE_WIFI_STATE" / > < uses - permission android : name = "android.permission.WRITE_EXTERNAL_STORAGE" / > < uses - permission android : name = "android.permission.READ_PHONE_STATE" / > < uses - permission android : name = "android.permission.MANAGE_ACCOUNTS" / > < uses - permission android : name = "android.permission.GET_ACCOUNTS" / > < ! -- 蓝牙分享所需的权限 -- >    < uses - permission android : name = "android.permission.BLUETOOTH" / >    < uses - permission android : name = "android.permission.BLUETOOTH_ADMIN" / >

2、添加activity信息

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 < activity      android : name = "com.mob.tools.MobUIShell"      android : theme = "@android:style/Theme.Translucent.NoTitleBar"      android : configChanges = "keyboardHidden|orientation|screenSize"      android : screenOrientation = "portrait"      android : windowSoftInputMode = "stateHidden|adjustResize" >        < intent - filter >          < data android : scheme = "tencent100371282" / >          < action android : name = "android.intent.action.VIEW" / >          < category android : name = "android.intent.category.BROWSABLE" / >          < category android : name = "android.intent.category.DEFAULT" / >      < / intent - filter >        < ! -- 调用新浪原生 SDK,需要注册的回调 activity -- >      < intent - filter >          < action android : name = "com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" / >          < category android : name = "android.intent.category.DEFAULT" / >      < / intent - filter > < / activity >

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 < ! --微信分享回调 -- > < activity      android : name = ".wxapi.WXEntryActivity"      android : theme = "@android:style/Theme.Translucent.NoTitleBar"      android : configChanges = "keyboardHidden|orientation|screenSize"      android : exported = "true"      android : screenOrientation = "portrait" / >   < ! --易信分享回调 -- > < activity      android : name = ".yxapi.YXEntryActivity"      android : theme = "@android:style/Theme.Translucent.NoTitleBar"      android : configChanges = "keyboardHidden|orientation|screenSize"      android : exported = "true"      android : screenOrientation = "portrait" / >   < ! -- 支付宝分享回调 -- > < activity      android : name = ".apshare.ShareEntryActivity"      android : theme = "@android:style/Theme.Translucent.NoTitleBar"      android : configChanges = "keyboardHidden|orientation|screenSize"      android : exported = "true" / >

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

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

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

private void showShare() { ShareSDK.initSDK(this); OnekeyShare oks = new OnekeyShare(); //关闭sso授权 oks.disableSSOWhenAuthorize(); // 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法 //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name)); // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用 oks.setTitle(getString(R.string.share)); // titleUrl是标题的网络链接,仅在人人网和QQ空间使用 oks.setTitleUrl("http://sharesdk.cn"); // text是分享文本,所有平台都需要这个字段 oks.setText("我是分享文本"); // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数 //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片 // url仅在微信(包括好友和朋友圈)中使用 oks.setUrl("http://sharesdk.cn"); // comment是我对这条分享的评论,仅在人人网和QQ空间使用 oks.setComment("我是测试评论文本"); // site是分享此内容的网站名称,仅在QQ空间使用 oks.setSite(getString(R.string.app_name)); // siteUrl是分享此内容的网站地址,仅在QQ空间使用 oks.setSiteUrl("http://sharesdk.cn"); // 启动分享GUI oks.show(this); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 private void showShare ( ) { ShareSDK . initSDK ( this ) ; OnekeyShare oks = new OnekeyShare ( ) ; //关闭sso授权 oks . disableSSOWhenAuthorize ( ) ;   // 分享时Notification的图标和文字  2.5.9以后的版本不调用此方法 //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name)); // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用 oks . setTitle ( getString ( R . string . share ) ) ; // titleUrl是标题的网络链接,仅在人人网和QQ空间使用 oks . setTitleUrl ( "http://sharesdk.cn" ) ; // text是分享文本,所有平台都需要这个字段 oks . setText ( "我是分享文本" ) ; // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数 //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片 // url仅在微信(包括好友和朋友圈)中使用 oks . setUrl ( "http://sharesdk.cn" ) ; // comment是我对这条分享的评论,仅在人人网和QQ空间使用 oks . setComment ( "我是测试评论文本" ) ; // site是分享此内容的网站名称,仅在QQ空间使用 oks . setSite ( getString ( R . string . app_name ) ) ; // siteUrl是分享此内容的网站地址,仅在QQ空间使用 oks . setSiteUrl ( "http://sharesdk.cn" ) ;   // 启动分享GUI oks . show ( this ) ; }

运行效果如下:

   

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

完整集成步骤

 

API文档

第四步:高级自定义功能

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

2.5.9集成kakao升级说明

 




第三方登录:


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

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

2、手动授权

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

Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME); weibo.setPlatformActionListener(paListener); weibo.authorize(); //移除授权 //weibo.removeAccount(true);
1 2 3 4 5 Platform weibo = ShareSDK . getPlatform ( SinaWeibo . NAME ) ; weibo . setPlatformActionListener ( paListener ) ; weibo . authorize ( ) ; //移除授权 //weibo.removeAccount(true);

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

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

Platform qq = ShareSDK.getPlatform(QQ.NAME);
1 Platform qq = ShareSDK . getPlatform ( QQ . NAME ) ;

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29      < ShareSDK          AppKey = "androidv1101" / > < ! -- 修改成你在 sharesdk后台注册的应用的 appkey "-->                     Id=" 1 "         SortId=" 1 "         AppKey=" 568898243 "         AppSecret=" 38a4f8204cc784f81f9f0daaf31e02e3 "         RedirectUrl=" http : //www.sharesdk.cn"          ShareByAppClient = "false"          Enable = "true" / >        < TencentWeibo          Id = "2"          SortId = "2"          AppKey = "801307650"          AppSecret = "ae36f4ee3946e1cbb98d6965b0b2ff5c"          RedirectUri = "http://sharesdk.cn"          Enable = "true" / >        < ! -- ShareByAppClient标识是否使用微博客户端分享,默认是 false -- >      < QZone          Id = "3"          SortId = "3"          AppId = "100371282"          AppKey = "aed9b0303e3ed1e27bae87c33761161d"          ShareByAppClient = "true"          Enable = "true" / >

3、自动授权

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

 

4、SSO (Single Sign-On)

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

Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME); weibo.SSOSetting(false); //设置false表示使用SSO授权方式 weibo.setPlatformActionListener(this); // 设置分享事件回调 weibo.authorize();
1 2 3 4 Platform weibo = ShareSDK . getPlatform ( SinaWeibo . NAME ) ; weibo . SSOSetting ( false ) ;    //设置false表示使用SSO授权方式 weibo . setPlatformActionListener ( this ) ; // 设置分享事件回调 weibo . authorize ( ) ;

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

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

平台截图:

 

项目包名:

keystore的md5签名:

 

 

5、自定义授权页面

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 < activity android : name = "com.mob.tools.MobUIShell" android : theme = "@android:style/Theme.Translucent.NoTitleBar" android : configChanges = "keyboardHidden|orientation" android : screenOrientation = "portrait" android : windowSoftInputMode = "stateHidden|adjustResize" > < ! -- AuthorizeAdapter继承自 cn . sharesdk . framework . authorize . AuthorizeAdapter, 可以监听到页面的生命周期,也能获取页面的各种 UI控件。 开发者可以通过继承 AuthorizeAdapter,重写其方法, 并获取各种 UI来自定义这个页面的行为。 -- > < meta - data android : name = "AuthorizeAdapter" android : value = "cn.sharesdk.demo.MyAdapter" / > < / activity >

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

public class MyAdapter extends AuthorizeAdapter { public void onCreate() { System.out.println("> ShareSDKUIShell created!"); //获取标题栏控件 TitleLayout llTitle = getTitleLayout(); //标题栏的文字修改 int resID= getStringRes(getActivity(), "second_title");//这个字段定义在strings.xml文件里面 llTitle.getTvTitle().setText(resID); } public void onDestroy() { System.out.println("> ShareSDKUIShell will be destroyed."); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class MyAdapter extends AuthorizeAdapter { public void onCreate ( ) { System . out . println ( "> ShareSDKUIShell created!" ) ; //获取标题栏控件          TitleLayout llTitle = getTitleLayout ( ) ; //标题栏的文字修改          int resID = getStringRes ( getActivity ( ) , "second_title" ) ; //这个字段定义在strings.xml文件里面          llTitle . getTvTitle ( ) . setText ( resID ) ; }   public void onDestroy ( ) { System . out . println ( "> ShareSDKUIShell will be destroyed." ) ; } }

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

 

6、平台数据库的操作

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

Platform qzone = ShareSDK.getPlatform(this, QZone.NAME); String accessToken = qzone.getDb().getToken(); // 获取授权token String openId = qzone.getDb().getUserId(); // 获取用户在此平台的ID String nickname = qzone.getDb().get(“nickname”); // 获取用户昵称 // 接下来执行您要的操作
1 2 3 4 5 Platform qzone = ShareSDK . getPlatform ( this , QZone . NAME ) ; String accessToken = qzone . getDb ( ) . getToken ( ) ; // 获取授权token String openId = qzone . getDb ( ) . getUserId ( ) ; // 获取用户在此平台的ID String nickname = qzone . getDb ( ) . get (nickname) ; // 获取用户昵称 // 接下来执行您要的操作

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

7、删除授权信息

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

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




更多相关文章

  1. 移植Busybox到Android平台
  2. WebRTC --- Chrome Android平台上的硬件加速编解码分析
  3. Android(安卓)Jetpack 系列篇(二) WorkManager
  4. Android.jar文件分析
  5. Android(安卓)Graphic : apk and Skia/OpenGL|ES
  6. android从activity跳转到fragment解决
  7. Android(安卓)Studio的NDK的两种编译方式ndk-build和CMake
  8. 关于 android 平台上的 usb 投屏
  9. 谈谈移动应用开发环境

随机推荐

  1. cocos creator 编译通不过, 出现 The "and
  2. 安卓版本和Api Level
  3. android > 布局文件 > 背景圆角
  4. Android-中常用方法集锦
  5. [转]Iperf tool for Android
  6. Android实现画虚线的控件
  7. 【Android Demo】Android中取得手机屏幕
  8. android wegit 组件
  9. Arcgis for Android(安卓)开发环境配置(An
  10. JPush极光推送Java服务器端API