第三方SDK集成库(授权|分享|支付)

https://github.com/czy1121/sdk3rd

第三方SDK集成库,支持 授权/分享/支付 等功能

  • 授权 目前支持 微信/QQ/新浪微博,客户端只需要配置APPID(新浪微博)
  • 分享 目前支持 微信(会话/朋友圈/收藏),QQ/QZone,新浪微博
  • 支付 目前支持 支付宝/微信支付
  • 对于授权与分享,客户端不用配置APPSECRET,只需要要APPID(新浪微博授权需要redirectUrl)
  • 对于支付,APPID包含在由后端动态返回的paydata里
  • 可注册自定义平台实现,满足特殊需求
  • 分享并未实现ui,需要自己提供ui

screenshot

目前这个库还不稳定,有些细节并未仔细考虑,有些功能也并未进行测试,支持的平台也不多,欢迎大家 star/issue/pr,共同完善这个库

关于授权

成功后的结果为 “code|{code}”, “token|{openId}|{token}” 两种形式

  • 微信授权是OAuth2.0返回的授权码(code)
  • QQ授权是SSO返回的是token
  • 微博授权其文档说是支持SSO与OAuth2.0,根据情况可能返回code与token

但客户端其实不需要关心是code还是token,直接把result发结服务端就好了

关于支付

很多支付类库会在客户端处理商品支付信息,其实这是不必要的,直接由服务端返回数据并交给支付SDK,然后处理支付结果就好了

关于分享

支持 纯文本/纯图片/图文/网页/音乐/视频 等分享类型

  • 网页/音乐/视频 是卡片形式,可添加 标题(title)/描述(description)/缩略图(thumb)
  • 微信朋友圈的网页链接不显示 description
  • 新浪微博文本包含的网址会转成链接
  • QZone 的 纯文本/纯图片/图文/视频 以“说说”的形式发布
平台 纯文本 纯图片 图文 网页 音乐 视频
QQ x o x o o x
QZone o o o o x o
WXSession o o x o o o
WXTimeline o o x o o o
Weibo o o o x x x
SendToQQ o o x x x x
SendToWXS o o x x x x
SendToWXT o o x x x x

使用方法

Demo

运行demo需要在gradle.properties中修改app的包名,签名和为app申请的APPID

1
2
3
4
5
6
7
8
9
APPLICATION_ID=ezy.demo.sdk3rd
APPID_QQ=YOUR_APPID
APPID_WEIXIN=YOUR_APPID
APPID_WEIBO=YOUR_APPID
SINGING_ALIAS=androiddebugkey
SINGING_PASSWORD=android
SINGING_FILE=debug.keystore

添加依赖

1
2
3
4
5
6
7
8
9
10
11
12
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile 'com.github.czy1121.sdk3rd:sdk3rd:0.1.2'
compile 'com.github.czy1121.sdk3rd:sdk3rd-alipay:0.1.1'
compile 'com.github.czy1121.sdk3rd:sdk3rd-qq:0.1.0'
compile 'com.sina.weibo.sdk:core:1.0.0:openDefaultRelease@aar'
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:1.0.2'
}

使用配置

配置APPID

1
2
3
4
PlatformConfig.useQQ(BuildConfig.APPID_QQ);
PlatformConfig.useWeixin(BuildConfig.APPID_WEIXIN);
PlatformConfig.useWeibo(BuildConfig.APPID_WEIBO, "http://www.sina.com/");
PlatformConfig.usePayments();

使用授权SDK

设置全局事件回调(非必要)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
AuthorizeSDK.setDefaultCallback(new OnCallback() {
@Override
public void onStarted(Activity activity) {
Log.e("ezy", "authorize started");
}
@Override
public void onCompleted(Activity activity) {
Log.e("ezy", "authorize completed");
}
@Override
public void onSucceed(Activity activity, Object result) {
Log.e("ezy", "authorize succeed");
}
@Override
public void onFailed(Activity activity, int code, String message) {
Log.e("ezy", "authorize failed [" + code + "]" + message);
}
});

接收授权结果(新浪微博/QQ)

1
2
3
4
5
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
AuthorizeSDK.onHandleResult(this, requestCode, resultCode, data);
}

调用授权

1
2
3
4
5
6
7
AuthorizeSDK.authorize(MainActivity.this, platform, new OnSucceed<String>() {
@Override
public void onSucceed(String result) {
Toast.makeText(MainActivity.this, "登陆成功 - " + result, Toast.LENGTH_LONG).show();
}
});

注册自定义平台,需要实现 IAuthorize 与相应的 IFactory

1
2
AuthorizeSDK.register(IFactory<IAuthorize> factory);
AuthorizeSDK.register(String platformName, String appId, Class<IAuthorize> clazz);

使用支付SDK

全局事件回调的设置与授权SDK类似

调用支付

1
2
3
4
5
6
PaymentSDK.pay(MainActivity.this, platform, paydata, new OnSucceed<String>() {
@Override
public void onSucceed(String result) {
// todo
}
});

注册自定义平台,需要实现 IPayable 与相应的 IFactory

1
2
PaymentSDK.register(IFactory<IPayable> factory);
PaymentSDK.register(String platformName, Class<IPayable> clazz);

使用分享SDK

全局事件回调的设置与授权SDK类似

分享结果的接收也与授权SDK类似(QQ)

注册自定义平台,需要实现 IShareable 与相应的 IFactory

1
2
ShareSDK.register(IFactory<IShareable> factory);
ShareSDK.register(String platformName, Class<IShareable> clazz);

分享

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
// 分享纯文本
ShareSDK.make(this, text).share(platform);
// 分享纯图片
ShareSDK.make(this, new MoImage(image)).share(platform);
// 分享图文
ShareSDK.make(this, text, new MoImage(image)).share(platform);
// 分享网页链接
ShareSDK.make(this, new MoWeb(url))
.withTitle("这是标题")
.withDescription("这是摘要")
.withThumb(thumb)
.share(platform, new OnSucceed<String>() {
@Override
public void onSucceed(String result) {
Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_LONG).show();
}
});
// 分享音乐
ShareSDK.make(this, new MoMusic(url))
.withTitle("这是标题")
.withDescription("这是摘要")
.withThumb(thumb)
.share(platform);

参考

友盟+分享组件90%常见问题汇总
http://bbs.umeng.com/thread-17764-1-1.html

友盟各平台可分享内容预览
http://dev.umeng.com/social/android/share-detail#5

Android 不同平台分享内容的详细说明
http://wiki.mob.com/不同平台分享内容的详细说明

新浪微博SDK
https://github.com/sinaweibosdk/weibo_android_sdk

欢迎打赏,谢谢支持~