首先在ShareSDK官网下载SDK或者在android studio中配置build.gradle.
ShareSDK Maven集成文档
注:使用ShareSDK maven集成方式,不需要在AndroidMainfest.xml下面配置任何权限和Activity
注意:需要先申请Mob的appkey与appsecret请点击这里查看
一、配置gradle
1、打开项目根目录的build.gradle,在buildscrip–>dependencies 模块下面添加 classpath ‘com.mob.sdk:MobSDK:+’,如下所示;
1
2
3
4
5
6
7
8
9
10
11
|
buildscript
{
repositories
{
jcenter
(
)
}
dependencies
{
.
.
.
classpath
'com.mob.sdk:MobSDK:+'
}
}
|
2、在使用到Mob产品的module下面的build.gradle文件里面添加引用
1
|
apply
plugin
:
‘
com
.
mob
.
sdk’
|
3、然后添加MobSDK方法,配置mob的key和秘钥 (与第三步是一个gradle中;注意:MobSDK方法是配置到文件根目录,与android并列,不要配置到android里面哦)
如果还没有key的,申请Mob的appkey与appsecret请点击这里查看
Onekeyshare是ShareSDK的GUI界面,如果不需要,则需要添加”gui false”,因为默认是使用gui,version字段为SDK的版本号,不设置则使用最新的版本;
1
2
3
4
5
6
7
|
MobSDK
{
appKey
"d580ad56b4b5"
appSecret
"7fcae59a62342e7e2759e9e397c82bdd"
ShareSDK
{
}
}
|
4、maven集成方式可以在Mob产品的module下面的build.gradle文件里面配置ShareSDK各个社交平台的key信息
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
30
|
MobSDK
{
appKey
"d580ad56b4b5"
appSecret
"7fcae59a62342e7e2759e9e397c82bdd"
ShareSDK
{
//平台配置信息
devInfo
{
SinaWeibo
{
appKey
"568898243"
appSecret
"38a4f8204cc784f81f9f0daaf31e02e3"
callbackUri
"http://www.sharesdk.cn"
shareByAppClient
false
}
Wechat
{
appId
"wx4868b35061f87885"
appSecret
"64020361b8ec4c99936c0e3999a9f249"
}
QQ
{
appId
"100371282"
appKey
"aed9b0303e3ed1e27bae87c33761161d"
}
Facebook
{
appKey
"1412473428822331"
appSecret
"a42f4f3f867dc947b9ed6020c2e93558"
callbackUri
"https://mob.com"
}
}
}
}
|
其中的devInfo
为来自社交平台的应用信息。
注:如果您没有在AndroidManifest
中设置appliaction
的类名,MobSDK会将这个设置为com.mob.MobApplication
,但如果您设置了,请在您自己的Application类中调用:
1
|
MobSDK
.
init
(
this
)
;
|
并且在Manifest清单文件中配置:tools:replace=”android:name”,如下所示:
1
2
3
|
<
application
android
:
name
=
".MyApplication"
tools
:
replace
=
"android:name"
>
|
二、配置字段说明
配置支持的平台全部属性字段有以下这些(注:区分大小写):
id | 数字,平台的id,可以设置为任何不重复的数字,(可选字段) |
sortId | 数字,九宫格界面平台的排序,越小越靠前,可以设置为任何不重复的数字,(可选字段) |
appId | 文本,对应ShareSDK.xml中的AppId、ClientID、ApplicationId、ChannelID |
appKey | 文本,对应ShareSDK.xml中的AppKey、ConsumerKey、ApiKey、OAuthConsumerKey |
appSecret | 文本,对应ShareSDK.xml中的AppSecret、ConsumerSecret、SecretKey、Secret、ClientSecret、ApiSecret、ChannelSecret |
callbackUri | 文本,对应ShareSDK.xml中的RedirectUrl、RedirectUri、CallbackUrl |
shareByAppClient | 布尔值,shareByAppClient标识是否使用客户端分享 |
bypassApproval | 布尔值,bypassApproval表示是否绕过审核 |
enable | 布尔值,enable字段表示此平台是否启用 |
userName | 文本,userName在微信小程序中使用 |
path | 文本,path在微信小程序中使用 |
hostType | 文本,表示服务器类型,在YouDao和Evernote中使用 |
withShareTicket | 布尔值,分享微信小程序时,分享出去的小程序被二次打开时可以获取到更多信息,true为能获取,反之不能;仅在微信中使用 |
miniprogramType | 数字,分享微信小程序时,表示小程序的开发状态,取值范围:0-正式,1-开发,2-体验,仅在微信中使用 |
配置完以上信息后同步(sync)一下代码就可以调用相关的接口了
三、添加代码
1、初始化MobSDK
如果您没有在AndroidManifest
中设置appliaction
的类名,MobSDK会将这个设置为com.mob.MobApplication
,但如果您设置了,请在您自己的Application类中调用:
1
|
MobSDK
.
init
(
this
)
;
|
以初始化MobSDK。
添加配置后,即可调用授权、获取资料、分享等操作,如一键分享的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
private
void
showShare
(
)
{
OnekeyShare
oks
=
new
OnekeyShare
(
)
;
//关闭sso授权
oks
.
disableSSOWhenAuthorize
(
)
;
// title标题,微信、QQ和QQ空间等平台使用
oks
.
setTitle
(
getString
(
R
.
string
.
share
)
)
;
// titleUrl QQ和QQ空间跳转链接
oks
.
setTitleUrl
(
"http://sharesdk.cn"
)
;
// text是分享文本,所有平台都需要这个字段
oks
.
setText
(
"我是分享文本"
)
;
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
oks
.
setImagePath
(
"/sdcard/test.jpg"
)
;
//确保SDcard下面存在此张图片
// url在微信、微博,Facebook等平台中使用
oks
.
setUrl
(
"http://sharesdk.cn"
)
;
// comment是我对这条分享的评论,仅在人人网使用
oks
.
setComment
(
"我是测试评论文本"
)
;
// 启动分享GUI
oks
.
show
(
this
)
;
}
}
|
四、混淆设置
ShareSDK已经做了混淆处理,再次混淆会导致不可预期的错误,请在您的混淆脚本中添加如下的配置,跳过对ShareSDK的混淆操作:
1
2
3
4
5
6
7
8
9
10
|
-
keep
class
cn
.
sharesdk
.
*
*
{
*
;
}
-
keep
class
com
.
sina
.
*
*
{
*
;
}
-
keep
class
*
*
.
R
$
*
{
*
;
}
-
keep
class
*
*
.
R
{
*
;
}
-
keep
class
com
.
mob
.
*
*
{
*
;
}
-
keep
class
m
.
framework
.
*
*
{
*
;
}
-
dontwarn
cn
.
sharesdk
.
*
*
-
dontwarn
com
.
sina
.
*
*
-
dontwarn
com
.
mob
.
*
*
-
dontwarn
*
*
.
R
$
*
|
五、可用的社交平台
任何配置在devInfo
下的社交平台都是可用的,他们包括:
分类 | 平台名称 |
常用平台 | SinaWeibo(新浪微博)、Wechat(微信好友)、WechatMoments(微信朋友圈)、QQ(QQ好友)、Facebook、FacebookMessenger |
其它主流平台 | TencentWeibo(腾讯微博)、QZone(QQ空间)、Renren(人人网)、Twitter、Douban(豆瓣)、Tumblr、GooglePlus(Google+)、Pinterest、Line、Instagram、Alipay(支付宝好友)、AlipayMoments(支付宝朋友动态)、Youtube、Meipai(美拍) |
其它平台 | WechatFavorite(微信收藏)、KaiXin(开心网)、Email(电子邮件)、ShortMessage(短信)、YouDao(有道云笔记)、Evernote(印象笔记)、LinkedIn(领英)、FourSquare、Flickr、Dropbox、VKontakte、Yixin(易信)、YixinMoments(易信朋友圈)、Mingdao(明道)、KakaoTalk、KakaoStory、WhatsApp、Pocket、Instapaper、Dingding(钉钉)、Telegram |
六、注意事项
1. ShareSDK默认会添加OnekeyShare库,如果您不需要这个库,可以在ShareSDK
下设置“gui false”来关闭OnekeyShare
2. MobSDK默认为ShareSDK提供最新版本的集成,如果您想锁定某个版本,可以在ShareSDK
下设置“version “某个版本””来固定使用这个版本
3. 如果使用MobSDK的模块会被其它模块依赖,请确保依赖它的模块也引入MobSDK插件,或在此模块的gradle中添加:
1
2
3
4
5
|
repositories
{
maven
{
url
"http://mvn.mob.com/android"
}
}
|
六、对微信的第三方登录说明
Demo:wechatlogin 此demo中有打包需要的keystore,密码是123456,微信登录需要正式打包签名测试
1、首先要把资源和微信的jar包复制到工程中,保证微信的开放平台的登录的权限一定要审核通过;
2、添加授权代码
1
2
3
|
Platform
wechat
=
ShareSDK
.
getPlatform
(
Wechat
.
NAME
)
;
wechat
.
setPlatformActionListener
(
paListener
)
;
wechat
.
authorize
(
)
;
|
3、申请key后替换sharesdk.xml默认的key
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<
Wechat
Id
=
"4"
SortId
=
"4"
AppId
=
"wx4868b35061f87885"
AppSecret
=
"64020361b8ec4c99936c0e3999a9f249"
BypassApproval
=
"false"
Enable
=
"true"
/
>
<
WechatMoments
Id
=
"5"
SortId
=
"5"
AppId
=
"wx4868b35061f87885"
AppSecret
=
"64020361b8ec4c99936c0e3999a9f249"
BypassApproval
=
"false"
Enable
=
"true"
/
>
//此处可以在build.gradle中MobSDK中设置!!!
|
4、配置Manifest文件,配置sharesdk和配置微信回调
1
2
3
4
5
|
<
activity
android
:
name
=
"com.mob.tools.MobUIShell"
android
:
theme
=
"@android:style/Theme.Translucent.NoTitleBar"
android
:
configChanges
=
"keyboardHidden|orientation|screenSize"
android
:
windowSoftInputMode
=
"stateHidden|adjustResize"
>
|
1
2
3
4
5
6
7
|
<
!
--微信分享回调
--
>
<
activity
android
:
name
=
".wxapi.WXEntryActivity"
android
:
theme
=
"@android:style/Theme.Translucent.NoTitleBar"
android
:
configChanges
=
"keyboardHidden|orientation|screenSize"
android
:
exported
=
"true"
android
:
screenOrientation
=
"portrait"
/
>
|
cocos creator js端代码:
//微信登录
weChatLogin : function(){
//微信登录
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","weChatLogin","()V");
this.schedule(function(){
var wxLoginSuccess = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","wxLoginIsSuccess","()Z");
console.log("is success " + wxLoginSuccess);
if(wxLoginSuccess){
console.log("2222222222222222222222222222");
//获得授权信息
var autoInfo = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","getWxAutoMessage","()Ljava/lang/String;");
var jsonInfo = JSON.parse(autoInfo);
console.log("jsonInfo is " + jsonInfo);
console.log("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" + autoInfo);
//如果登录成功的话将授权信息发送给后端
console.log("autoInfo is " + autoInfo);
//关闭所有计数器
this.unscheduleAllCallbacks();
if(autoInfo != ""){
this.sendRequestToWXServer(autoInfo);
}
}
},0.5);
},
anduoid端实现细节:
首先在oncreate函数里面 先初始化微信即授权登录
Platform wechat= ShareSDK.getPlatform(Wechat.NAME);
/**
*
* 微信登录
*
* */
public static void weChatLogin(){
System.out.println("________________________");
//设置微信授权相关信息
wechat.setPlatformActionListener(new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
app.wxAutoMessage = platform.getDb().exportData();
//微信登录成功
app.isWxLoginSuccess = true;
Toast.makeText(AppActivity.app, "登录成功", Toast.LENGTH_SHORT).show();
System.out.println(app.wxAutoMessage);
System.out.println("--------------<<<<<<<<<<<<<<<<<<<----------------");
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void onCancel(Platform platform, int i) {
System.out.println("已经取消操作");
}
});
wechat.authorize();
Platform wechatPlatform = ShareSDK.getPlatform(Wechat.NAME);
System.out.println("<<<<---------------->>>>wechatPlatFrom is " + wechatPlatform);
}
public static boolean wxLoginIsSuccess(){
System.out.println("微信是否登录成功:" + app.isWxLoginSuccess);
return app.isWxLoginSuccess;
}
public static String getWxAutoMessage(){
System.out.println("微信认证信息是:" + app.wxAutoMessage);
return app.wxAutoMessage;
}
这样我们可以把授权信息传给服务器去做验证:
然后再通过refresh_token获取到openid和access_token
通过js请求的方式:网址是:https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
js方法如下:
//获取access_token和openid等信息并将这些信息传给服务端
getCode : function(refreshToken){
var self = this;
var url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=wx72f9006d0b1d9b7f&grant_type=refresh_token&refresh_token='+refreshToken;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && (xhr.status >= 200 && xhr.status < 400)){
self.weixinResponse = xhr.responseText;
console.log("in getCode response is " + self.weixinResponse);
//将数据放回出去
self.sendToSeverOfWechat(self.weixinResponse);
}
}
xhr.open("POST",url);
xhr.send();
},