本系列文章将第三方的登陆分享功能进行二次封装,统一接口调用,简化了接不一样平台登陆分享的步骤。java
系列一 Android SDK的二次封装和使用
系列二 源码解析
系列三 微信SDK接入
系列四 QQ SDK接入
系列五 新浪微博 SDK接入android
如今有市场上又好几家都作了社会化分享组件,好比ShareSDK,Umeng等。惟一的缺点就是,必须得注册相应服务平台的帐号。没法单纯使用客户端SDK。git
本系列文章即开源实现了社会化的登陆分享,统一对外接口。会分别从如何使用、源码解析、各平台接入进行解读。github
先上开源代码和封装好的SDK。api
欢迎在issue里提功能需求和建议!微信
如图:app
采用了jar包的方式封装sdk,须要使用时能够引入social_sdk.jar再搭配须要的平台sdk使用.
这种方式能够减小sdk的体积,须要什么平台就引入哪一个平台.更为合理.ide
目录结构:post
替换Demo中的MainActivity中的qq appid、wx appid、weibo appkey为本身的
public class MainActivity extends AppCompatActivity implements IWeiboHandler.Response{
...
private static final String WX_APPID = "your wx appid"; //申请的wx appid
private static final String QQ_APPID = "your qq appid"; //申请的qq appid
private static final String SINA_WB_APPKEY = "your sina wb appkey"; //申请的新浪微博 appkey
...
}复制代码
替换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。以下
该SDK主要集成了受权登陆和分享的功能
将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" />复制代码
在项目入口(或者在调用前)须要配置平台的信息,配置一次便可.
PlatformConfig.setWeixin(WX_APPID);
PlatformConfig.setQQ(QQ_APPID);
PlatformConfig.setSinaWB(SINA_WB_APPKEY);复制代码
调用方式使用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);
}
@Override
public void onError(PlatformType platform_type, String err_msg) {
Log.i("tsy", "onError:" + err_msg);
}
@Override
public void onCancel(PlatformType platform_type) {
Log.i("tsy", "onCancel");
}
});复制代码
分享:
//分享媒介 后面有详细介绍
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");
}
@Override
public void onError(PlatformType platform_type, String err_msg) {
Log.i("tsy", "share onError:" + err_msg);
}
@Override
public void onCancel(PlatformType platform_type) {
Log.i("tsy", "share onCancel");
}
});复制代码
如今集成了文字分享,图片分享,音乐分享,视频分享,网页分享5种分享媒介.不一样的平台可能只有其中某几种.
ShareTextMedia shareMedia = new ShareTextMedia();
shareMedia.setText("分享文字测试");复制代码
ShareImageMedia shareMedia = new ShareImageMedia();
shareMedia.setImage(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));复制代码
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));复制代码
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));复制代码
ShareWebMedia shareMedia = new ShareWebMedia();
shareMedia.setTitle("分享网页测试");
shareMedia.setDescription("分享网页测试");
shareMedia.setWebPageUrl("http://www.baidu.com");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));复制代码
将目录中的weixin_sdk_v3.1.1.jar放入项目.
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" />复制代码
设置配置信息:
PlatformConfig.setWeixin(WX_APPID);复制代码
PlatformType:
微信:PlatformType.WEIXIN(可用于登陆和微信回话分享)
朋友圈:PlatformType.WEIXIN_CIRCLE(用于微信朋友圈分享)
使用微信登陆分享须要签名打包,而且签名和包名要和微信平台填入的信息一致。
将目录中的qq_mta-sdk-1.6.2.jar和qq_sdk_v3.1.0.jar放入项目.
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" />复制代码
设置配置信息:
PlatformConfig.setQQ(QQ_APPID);复制代码
PlatformType:
微信:PlatformType.QQ(可用于登陆和QQ分享)
朋友圈:PlatformType.QZONE(用于qq控件分享)
使用QQ登陆须要签名打包,而且签名和包名要和QQ开放平台填入的信息一致。
将目录中的weiboSDKCore_3.1.4.jar放入项目.
将全部so文件统一放到项目的目录app/jniLibs中(和libs同级), 而后在gradle中加上
android {
...
//引入微博的全部so库
sourceSets {
main {
jniLibs.srcDirs = ['jniLibs']
}
}
}复制代码
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);
}复制代码
而后正常发起受权或者分享代码便可.
设置配置信息:
PlatformConfig.setSinaWB(SINA_WB_APPKEY);复制代码
使用新浪登陆分享须要签名打包,而且签名和包名要和新浪平台填入的信息一致。
整个项目是一个可扩展的SDK,欢迎fork实现本身须要增长平台的代码,这个库自己也会不断添加平台和功能点。本篇就酱紫了,下篇会有整个SDK的基本源码解析。