微信登陆SDK接入 微信 qq 新浪 登陆&&分享
2017-01-17 23:09
260 查看
SocialSDKAndroid
对第三方社会化sdk的集成和二次封装,比如第三方授权登录、第三方分享等. 欢迎发issue建议新的功能点和渠道集成
原文阅读:
http://www.jianshu.com/p/4ec1d9c15763
0
版本更新记录
版本更新记录
1
总体概述
采用了jar包的方式封装sdk,需要使用时可以引入social_sdk.jar再搭配需要的平台sdk使用. 这种方式可以减少sdk的体积,需要什么平台就引入哪个平台.更为合理.
1.1
目录介绍
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
1.2
Demo介绍
替换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。如下
2
功能介绍
2.1
授权登录
微信授权登录QQ授权登录
新浪微博授权登录
2.2
分享
2.2.1
分享媒介
文字图片
音乐
视频
网页
2.2.2
分享平台
微信会话分享微信朋友圈分享
QQ分享
QQ空间分享
新浪微博分享
2.3
API调用
SDK中封装了部分API,比如当第三方授权成功后获取到access_token,会提供一些API查询用户信息,刷新access_token等。!注意:由于调用这些API会用到appsecret,所以一般不建议放到客户端做
具体API见底附录。
3
开发说明
3.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" />
3.2
配置平台信息
在项目入口(或者在调用前)需要配置平台的信息,配置一次即可.PlatformConfig.setWeixin(WX_APPID); PlatformConfig.setQQ(QQ_APPID); PlatformConfig.setSinaWB(SINA_WB_APPKEY);
3.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); } @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"); } });
3.4
分享媒介
现在集成了文字分享,图片分享,音乐分享,视频分享,网页分享5种分享媒介.不同的平台可能只有其中某几种.
3.4.1
文字分享
ShareTextMedia shareMedia = new ShareTextMedia(); shareMedia.setText("分享文字测试");
3.4.2
图片分享
ShareImageMedia shareMedia = new ShareImageMedia(); shareMedia.setImage(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));
3.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));
3.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));
3.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));
4
第三方平台接入
4.1
微信
4.1.1
集成sdk
将目录中的weixin_sdk_v3.1.1.jar放入项目.
4.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" />
4.1.3
常量定义
设置配置信息:PlatformConfig.setWeixin(WX_APPID);
PlatformType:
微信:PlatformType.WEIXIN(可用于登录和微信回话分享)
朋友圈:PlatformType.WEIXIN_CIRCLE(用于微信朋友圈分享)
4.1.4
自定义scope state
可以通过接口setScopeState修改 scope 和 state。默认scope是 "snsapi_userinfo,snsapi_friend,snsapi_message" 默认state是 "none"
WXHandler.setScopeState("your scope", "your state");
4.1.5
注意
使用微信登录分享需要签名打包,并且签名和包名要和微信平台填入的信息一致。
4.2
QQ
4.2.1
集成sdk
将目录中的qq_mta-sdk-1.6.2.jar和qq_sdk_v3.1.0.jar放入项目.
4.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" />
4.2.3
常量定义
设置配置信息:PlatformConfig.setQQ(QQ_APPID);
PlatformType:
微信:PlatformType.QQ(可用于登录和QQ分享)
朋友圈:PlatformType.QZONE(用于qq控件分享)
4.2.4
注意
使用QQ登录需要签名打包,并且签名和包名要和QQ开放平台填入的信息一致。
4.2.5
回调设置
要在onActivityResult添加以下@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); mSocialApi.onActivityResult(requestCode, resultCode, data); }
4.3
新浪微博
4.3.1
集成sdk
将目录中的weiboSDKCore_3.1.4.jar放入项目.将所有so文件统一放到项目的目录app/jniLibs中(和libs同级), 然后在gradle中加上
android { ... //引入微博的所有so库 sourceSets { main { jniLibs.srcDirs = ['jniLibs'] } } }
4.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.socialsample.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); }
然后正常发起授权或者分享代码即可.
4.3.3
常量定义
设置配置信息:PlatformConfig.setSinaWB(SINA_WB_APPKEY);
4.3.4
自定义REDIRECT_URL
可以通过接口setRedirctUrl修改 REDIRECT_URL默认REDIRECT_URL是 "https://api.weibo.com/oauth2/default.html"
SinaWBHandler.setRedirctUrl("your RedirctUrl");
4.3.5
注意
使用新浪登录分享需要签名打包,并且签名和包名要和新浪平台填入的信息一致。并且微博开放平台的回调地址(REDIRECT_URL)要和代码中的REDIRECT_URL一致
附录
API列表
1
微信API (WXApi)
获取access_token/** * 获取access_token * @param wxAppId wx appid * @param wxAppSecret wx appsecret * @param code 调用微信登录获取的code * @param callback */
getAccessToken(String wxAppId, String wxAppSecret, String code, final Callback callback)
获取用户信息
/** * 获取用户信息 * @param openid openid * @param access_token access_token * @param callback */
getUserInfo(String openid, String access_token, final Callback callback)
混淆
#social -dontwarn com.tsy.sdk.social.** -keep class com.tsy.sdk.social.**{*;} #qq & weixin -dontwarn com.tencent.** -keep class com.tencent.** {*;} #sina -dontwarn com.sina.** -keep class com.sina.** {*;}
相关文章推荐
- android 微信 以及QQ的SDK接入分享功能遇到的些问题小结
- Android 微信,QQ,新浪三方登录及分享官方SDK集成
- 微信JS-SDK实现自定义分享功能,分享给朋友,分享到QQ,分享到微博
- android中关于图片分享到QQ或者微信,朋友圈及其他(免SDK)
- 不接入微信sdk,在APP中实现微信分享,支付
- iOS 9中需要使用 QQ/QQ空间/支付宝/微信SDK 的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码
- SharePanel – Android上简单的一键分享,可分享到微信QQ和新浪微博
- IOS9中各种微信或QQ分享SDK显示为安装软件
- ios 单独集成qq和微信分享sdk的方法
- 安卓一键分享到qq,微信,微博,官方SDK非第三方
- 分享QQ、微信 好友 ,空间、 新浪 的三种方式(验证通过)
- 第三方分享(新浪,微信,QQ)
- iOS新浪微博 微信好友、微信朋友圈、QQ自身sdk分享方法
- Android:QQ分享、微信分享、朋友圈分享(不使用第三方SDK)
- iOS UIActivityViewController 接入WeChatSDK 微信 朋友圈分享
- 集成友盟第三方登录(qq、微信、微信朋友圈、新浪)、分享
- Unity3d 4.6.8 ShareSDK 分享新浪,微信,qq,经验总结
- QQ、微信、新浪等开放平台网址(申请接入)
- cocos2d手游之微信分享SDK接入指南