社会化登录分享-Android SDK的二次封装和使用
本系列文章将第三方的登录分享功能进行二次封装,统一接口调用,简化了接不同平台登录分享的步骤。
0 系列文章
系列一 Android SDK的二次封装和使用
系列二 源码解析
系列三 微信SDK接入
系列四 QQ SDK接入
系列五 新浪微博 SDK接入
1 前言
现在有市场上又好几家都做了社会化分享组件,比如ShareSDK,Umeng等。唯一的缺点就是,必须得注册相应服务平台的账号。无法单纯使用客户端SDK。
本系列文章即开源实现了社会化的登录分享,统一对外接口。会分别从如何使用、源码解析、各平台接入进行解读。
2 Github地址
先上开源代码和封装好的SDK。
https://github.com/tsy12321/SocialSDKAndroid
欢迎在issue里提功能需求和建议!
3 目录介绍
如图:

采用了jar包的方式封装sdk,需要使用时可以引入social_sdk.jar再搭配需要的平台sdk使用.
这种方式可以减少sdk的体积,需要什么平台就引入哪个平台.更为合理.
目录结构:
- app/ Demo代码
- social_sdk/ sdk的开发源码module 开发完成后用gradle中makejar打成jar包
- social_sdk_vxxx.jar sdk的jar包 直接使用.搭配所需的平台sdk包.
- weixin_sdk/ 微信sdk
- qq_sdk/ qq sdk
- sina_weibo_sdk/ 新浪微博 sdk
4 Demo介绍
替换Demo中的MainActivity中的qq appid、wx appid、weibo appkey为自己的
public class MainActivity extends AppCompatActivity implements IWeiboHandler.Response{
...
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String WX_APPID = <span class="hljs-string">"your wx appid"</span>; <span class="hljs-comment">//申请的wx appid</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String QQ_APPID = <span class="hljs-string">"your qq appid"</span>; <span class="hljs-comment">//申请的qq appid</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String SINA_WB_APPKEY = <span class="hljs-string">"your sina wb appkey"</span>; <span class="hljs-comment">//申请的新浪微博 appkey</span>
...
}
替换AndroidManifest中的qq appid为自己的
<!--qq-->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:noHistory="true"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent1111111" /> <!--1111111改为你的qq appid-->
</intent-filter>
</activity>
替换builde.gradle文件中的签名为自己的app签名。
修改完上面3个地方后即可跑通Demo。如下

5 功能介绍
该SDK主要集成了授权登录和分享的功能
5.1 授权登录
- 微信授权登录
- QQ授权登录
- 新浪微博授权登录
5.2 分享
5.2.1 分享媒介
- 文字
- 图片
- 音乐
- 视频
- 网页
5.2.2 分享平台
- 微信会话分享
- 微信朋友圈分享
- QQ分享
- QQ空间分享
- 新浪微博分享
6 开发说明
6.1 准备
将social_sdk.jar和需要的平台sdk放入项目中引用.
AndroidManifest加上以下基本的权限(之后各个平台会注册一些不同的信息后面会说明)
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
6.2 配置平台信息
在项目入口(或者在调用前)需要配置平台的信息,配置一次即可.
PlatformConfig.setWeixin(WX_APPID);
PlatformConfig.setQQ(QQ_APPID);
PlatformConfig.setSinaWB(SINA_WB_APPKEY);
6.3 接口使用说明
调用方式使用api调用登录或者分享接口,在参数中区别平台,实现回调接收成功 取消或者失败的结果.
示例如下:(某些平台会有一些特殊处理后面会在平台中说明)
初始化api:
SocialApi mSocialApi = SocialApi.get(getApplicationContext());
登录授权:
mSocialApi.doOauthVerify(this, PlatformType.WEIXIN, new AuthListener() {
@Override
public void onComplete(PlatformType platform_type, Map<String, String> map) {
Log.i("tsy", "oncomplete:" + map);
}
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onError</span><span class="hljs-params">(PlatformType platform_type, String err_msg)</span> </span>{
Log.i(<span class="hljs-string">"tsy"</span>, <span class="hljs-string">"onError:"</span> + err_msg);
}
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCancel</span><span class="hljs-params">(PlatformType platform_type)</span> </span>{
Log.i(<span class="hljs-string">"tsy"</span>, <span class="hljs-string">"onCancel"</span>);
}
});
分享:
//分享媒介 后面有详细介绍
ShareWebMedia shareMedia = new ShareWebMedia();
shareMedia.setTitle("分享网页测试");
shareMedia.setDescription("分享网页测试");
shareMedia.setWebPageUrl("http://www.baidu.com");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));
mSocialApi.doShare(this, PlatformType.WEIXIN, shareMedia, new ShareListener() {
@Override
public void onComplete(PlatformType platform_type) {
Log.i("tsy", "share onComplete");
}
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onError</span><span class="hljs-params">(PlatformType platform_type, String err_msg)</span> </span>{
Log.i(<span class="hljs-string">"tsy"</span>, <span class="hljs-string">"share onError:"</span> + err_msg);
}
<span class="hljs-meta">@Override</span>
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCancel</span><span class="hljs-params">(PlatformType platform_type)</span> </span>{
Log.i(<span class="hljs-string">"tsy"</span>, <span class="hljs-string">"share onCancel"</span>);
}
});
6.4 分享媒介
现在集成了文字分享,图片分享,音乐分享,视频分享,网页分享5种分享媒介.不同的平台可能只有其中某几种.
6.4.1 文字分享
ShareTextMedia shareMedia = new ShareTextMedia();
shareMedia.setText("分享文字测试");
6.4.2 图片分享
ShareImageMedia shareMedia = new ShareImageMedia();
shareMedia.setImage(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));
6.4.3 音乐分享
ShareMusicMedia shareMedia = new ShareMusicMedia();
shareMedia.setTitle("分享音乐测试");
shareMedia.setDescription("分享音乐测试");
shareMedia.setMusicUrl("http://idg-tangsiyuan.tunnel.nibaguai.com/splash/music.mp3");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));
6.4.4 视频分享
ShareVideoMedia shareMedia = new ShareVideoMedia();
shareMedia.setTitle("分享视频测试");
shareMedia.setDescription("分享视频测试");
shareMedia.setVideoUrl("http://idg-tangsiyuan.tunnel.nibaguai.com/splash/music.mp3");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));
6.4.5 网页分享
ShareWebMedia shareMedia = new ShareWebMedia();
shareMedia.setTitle("分享网页测试");
shareMedia.setDescription("分享网页测试");
shareMedia.setWebPageUrl("http://www.baidu.com");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));
7 第三方平台接入
7.1 微信
7.1.1 集成sdk
将目录中的weixin_sdk_v3.1.1.jar放入项目.
7.1.2 配置
AndroidManifest中添加:
<activity
android:name="com.tsy.sdk.social.weixin.WXCallbackActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="true"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity-alias
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:targetActivity="com.tsy.sdk.social.weixin.WXCallbackActivity" />
7.1.3 常量定义
设置配置信息:
PlatformConfig.setWeixin(WX_APPID);
PlatformType:
微信:PlatformType.WEIXIN(可用于登录和微信回话分享)
朋友圈:PlatformType.WEIXIN_CIRCLE(用于微信朋友圈分享)
7.1.4 注意
使用微信登录分享需要签名打包,并且签名和包名要和微信平台填入的信息一致。
7.2 QQ
7.2.1 集成sdk
将目录中的qq_mta-sdk-1.6.2.jar和qq_sdk_v3.1.0.jar放入项目.
7.2.2 配置
AndroidManifest中添加:
<!--qq-->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:noHistory="true"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent你的appid" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
7.2.3 常量定义
设置配置信息:
PlatformConfig.setQQ(QQ_APPID);
PlatformType:
微信:PlatformType.QQ(可用于登录和QQ分享)
朋友圈:PlatformType.QZONE(用于qq控件分享)
7.2.4 注意
使用QQ登录需要签名打包,并且签名和包名要和QQ开放平台填入的信息一致。
7.3 新浪微博
7.3.1 集成sdk
将目录中的weiboSDKCore_3.1.4.jar放入项目.
将所有so文件统一放到项目的目录app/jniLibs中(和libs同级), 然后在gradle中加上
android {
...
<span class="hljs-comment">//引入微博的所有so库</span>
sourceSets {
main {
jniLibs.srcDirs = [<span class="hljs-string">'jniLibs'</span>]
}
}
}
7.3.2 配置
AndroidManifest中添加:
<activity
android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize"></activity>
并且在发起分享的activity页面的AndroidManifest页面中加上
<activity android:name="com.tsy.girl.MainActivity"> <!--发起分享的页面-->
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
然后在发起分享的Activity中添加以下代码.(假如是MainActivity)
实现IWeiboHandler.Response接口, 然后在实现的方法中写:
@Override
public void onResponse(BaseResponse baseResponse) {
((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onResponse(baseResponse);
}
实现onNewIntent和onActivityResult方法:
@Override
protected void onNewIntent(Intent intent) {
((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onNewIntent(intent, this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
mSocialApi.onActivityResult(requestCode, resultCode, data);
}
在onCreate中添加以下:
if (savedInstanceState != null) {
((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onNewIntent(getIntent(), this);
}
然后正常发起授权或者分享代码即可.
7.3.3 常量定义
设置配置信息:
PlatformConfig.setSinaWB(SINA_WB_APPKEY);
7.3.4 注意
使用新浪登录分享需要签名打包,并且签名和包名要和新浪平台填入的信息一致。
结尾
整个项目是一个可扩展的SDK,欢迎fork实现自己需要增加平台的代码,这个库本身也会不断添加平台和功能点。本篇就酱紫了,下篇会有整个SDK的基本源码解析。
</div>
社会化登录分享-Android SDK的二次封装和使用的更多相关文章
- Android应用之——微信微博第三方sdk登录分享使用过程中的一些常见问题
前言 近期在使用第三方登录和分享的过程中遇到了非常多问题,一方面能够归结为自己经验的不足,还有一方面事实上也说明了官方文档的含糊不清.这篇博文不会写关于怎样使用第三方登录分享,由于官方文档已经写明了步 ...
- Android 应用程序集成Google 登录及二次封装
谷歌登录API: https://developers.google.com/identity/sign-in/android/ 1.注册并且登录google网站 https://accounts. ...
- Android 应用程序集成FaceBook 登录及二次封装
1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台 https://developers.facebook.com/ap ...
- Android进阶笔记06:Android 实现扫描二维码实现网页登录
一. 扫描二维码登录的实现机制: 详细流程图: (1)PC端打开网页(显示出二维码),这时候会保存对应的randnumber(比如:12345678). (2)Android客户端扫码登录,Andro ...
- Android SDK 百度云盘分享链接
SDK百度云盘地址: 链接: http://pan.baidu.com/s/1skSCplF 密码: drq4 使用说明: 这是Android开发所需的sdk,下载并解压后,将解压出的整个文件夹复制或 ...
- Android摸索-二、解决Android SDK Manager下载太慢问题
下载Android SDK Manger 那个速度………… 有了这个再也不用担心了 1.打开android sdk manager 2.打开tool->options 按图片中输入参数:mi ...
- Appium移动自动化测试-----(二)安装 Android SDK
安装Android SDK Android SDK(Software Development Kit,软件开发工具包)提供了 Android API 库和开发工具构建,测试和调试应用程序.简单来讲,A ...
- React Native微信分享 朋友圈分享 Android/iOS 通用
超详细React Native实现微信好友/朋友圈分享功能-Android/iOS双平台通用 2016/06/16 | React Native技术文章 | Sky丶清| 暂无评论 | 1 ...
- [转] Android SDK manager 无法获取更新版本列表
打开这个网址(LINK)就可以看到adt的详细信息. 或者直接在你的eclipse的Help > Install New Software里面add,地址直接输入 https://dl-ss ...
随机推荐
- Dcloud课程5 php如何实现文件缓存技术(静态数据缓存)
Dcloud课程5 php如何实现文件缓存技术(静态数据缓存) 一.总结 一句话总结:保存在磁盘上的静态文件,用PHP生成数据到静态文件中.其实cookie和session使用的就是这样的技术,所以c ...
- R语言- 基本统计分析
目的: 1.描述性统计分析 2.频数表和;列连表 3.相关系数和协方差 4.t检验 5.非参数统计 在上一节中使用了图形来探索数据,下一步就是给出具体的数据来描述每个变量的分布和关系 1.描述性统计分 ...
- (转) 设置sqlplus中的退格键
转自:http://blog.itpub.net/26110315/viewspace-717249/ 有些时候当你使用sqlplus登录到数据库中的时候,敲错了命令想要删除修改的时候,发现以前敲入的 ...
- [Angular] Reactive Store and AngularFire Observables
A simple store implemenet: import { Observable } from 'rxjs/Observable'; import { BehaviorSubject } ...
- Machine Learning With Spark学习笔记(提取10万电影数据特征)
注:原文中的代码是在spark-shell中编写运行的,本人的是在eclipse中编写运行,所以结果输出形式可能会与这本书中的不太一样. 首先将用户数据u.data读入SparkContext中.然后 ...
- html5 10大html5前端框架
Bootstrap 首先说 Bootstrap,估计你也猜到会先说或者一定会有这个( 呵呵了 ),这是说明它的强大之处,拥有框架一壁江山的势气.自己刚入道的时候本着代码任何一个字母都得自己敲出来挡我者 ...
- 设计模式--单例模式之Lock
1.为什么用Lock及关键知识 当我们使用线程的时候,效率最高的方式当然是异步,即个个线程同时运行,其间互不依赖和等待.当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进 ...
- VIM使用说明
[vim 命令-移动光标]:h 的鍵位于左邊,每次按下就會向左移動.l 的鍵位于右邊,每次按下就會向右移動.j 鍵看起來很象一支尖端方向朝下的箭頭.k朝上移动. [vim 命令-启动和退出]:1. 請 ...
- [Angular] Learn How To Use ng-template Inputs
For example, we have a modal component, it can config that using ng-template as a configurable templ ...
- [Angular 2] Share Template Content In Another Template With Content Projection <ng-content>
Angular 1 provided a mechanism to place content from your template inside of another template called ...