关于集成:
在manifest里添加
xmlns:tools="http://schemas.android.com/tools"
在application里添加
tools:replace="android:name"
如果您没有在AndroidManifest中设置appliaction的类名,MobSDK会将这个设置为com.mob.MobApplication,但如果您设置了,请在您自己的Application类中调用:
MobSDK.init(this);
在build.gradle(Project)里面dependencies层级下添加
//ShareSDK 集成需要添加的
classpath "com.mob.sdk:MobSDK:2018.0319.1724"
在build.gradle(APP)里面添加
//ShareSDK 集成需要添加的
apply plugin: 'com.mob.sdk'
在build.gradle(APP)里面添加(跟android块是同级的,不要添加到android块里面)
//ShareSDK 集成需要添加的
MobSDK {
appKey "XXX"
appSecret "XXX"
ShareSDK {
//平台配置信息
devInfo {
Wechat {
appId "XX"
appSecret "XX"
}
QQ {
appId "XX"
appKey "XX"
shareByAppClient true
}
}
}
配置第三方平台参数:
//ShareSDK 集成需要添加的
MobSDK {
appKey "2c9f46bacf006"
appSecret "fb68b9f14773bccafcae963d4e94c80a"
ShareSDK {
//平台配置信息
devInfo {
//配置分享微信好友
Wechat {
appId "appId "
appSecret "appSecret "
}
//配置分享微信朋友圈
WechatMoments{
appId "appId "
appSecret "appSecret "
}
}
}
}
其中Wechat字段名代表微信,WechatMoments字段名代表微信朋友圈,更多的平台对应字段名对照以下信息
关于分享:
使用ShareSDK自带的UI弹出分享:
OnekeyShare oks = new OnekeyShare();
oks.disableSSOWhenAuthorize();
oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {
@Override
public void onShare(Platform platform, cn.sharesdk.framework.Platform.ShareParams paramsToShare) {
if ("Wechat".equals(platform.getName())) {
//点击微信分享
paramsToShare.setTitle("标题");
paramsToShare.setText("我是共用的参数,这几个平台都有text参数要求,提取出来啦");
paramsToShare.setImageUrl("http://scene3d.4dage.com/images/imagesZrbrfZzI/thumbSmallImg.jpg?m=7");
paramsToShare.setUrl("http://sharesdk.cn");
paramsToShare.setShareType(Platform.SHARE_WEBPAGE);
}
if ("WechatMoments".equals(platform.getName())) {
//点击朋友圈分享
paramsToShare.setTitle("标题");
paramsToShare.setText("我是共用的参数,这几个平台都有text参数要求,提取出来啦");
paramsToShare.setImageUrl("https://hmls.hfbank.com.cn/hfapp-api/9.png");
paramsToShare.setUrl("http://baidu.com");
paramsToShare.setShareType(Platform.SHARE_WEBPAGE);
}
}
});
oks.setCallback(new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
Log.d("ShareLogin", "onComplete ----> 分享成功");
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
Log.d("ShareLogin", "onComplete ----> 分享失败");
}
@Override
public void onCancel(Platform platform, int i) {
Log.d("ShareLogin", "onCancel ----> 分享取消");
}
});
// 启动分享GUI
oks.show(this);
上面回调中的Wechat,以及WechatMoments分别代表Gradle里面devInfo配置的字段,弹出分享框里面的可选择分享也对应devInfo里面的配置,只配置一个就只显示微信
devInfo {
//配置分享微信好友
Wechat {
appId "appId "
appSecret "appSecret "
}
//配置分享微信朋友圈
WechatMoments{
appId "appId "
appSecret "appSecret "
}
}
自定义分享界面:
自定义好UI以后,点击不同的平台图标,弹到不同的分享客户端
Platform.ShareParams sp = new Platform.ShareParams();
sp.setText("测试分享的文本");
// sp.setImagePath("/mnt/sdcard/测试分享的图片.jpg");
Platform tw = ShareSDK.getPlatform("Wechat");
sp.setImageUrl("http://scene3d.4dage.com/images/imagesZrbrfZzI/thumbSmallImg.jpg?m=7");
sp.setUrl("http://www.baidu.com");
sp.setTitle("我是title");
sp.setText("我是共用的参数,这几个平台都有text参数要求,提取出来啦");
sp.setShareType(Platform.SHARE_WEBPAGE);
// 设置分享事件回调
tw.setPlatformActionListener(new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
ToastUtils.showLongToast(LoginActivity.this, "分享成功");
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
ToastUtils.showLongToast(LoginActivity.this, "分享错误");
}
@Override
public void onCancel(Platform platform, int i) {
ToastUtils.showLongToast(LoginActivity.this, "分享取消");
}
});
// 执行分享
tw.share(sp);
上面ShareSDK.getPlatform("Wechat");里面的参数Wechat对应devInfo里面配置的字段,Wechat代表弹出到微信
devInfo {
//配置分享微信好友
Wechat {
appId "appId "
appSecret "appSecret "
}
//配置分享微信朋友圈
WechatMoments{
appId "appId "
appSecret "appSecret "
}
}
常用分享参数:
字段名称 | 描述 |
---|---|
text | 待分享的文本 |
imagePath | 待分享的本地图片。如果目标平台使用客户端分享,此路径不可以在/data/data下面 |
filePath | 待分享的文件路径。这个用在Dropbox和Wechat中 |
title | 分享内容的标题 |
notebook | 存放笔记的笔记本,如果不存在,会创建。一般用在印象笔记等“笔记类”平台中 |
stack | 印象笔记中的字段,用于归类笔记本 |
resource | 印象笔记中的字段,数组,暂时支持String类型和File类型的元素。如果想一次发送多个文本和图片,需要使用这个字段 |
tags | 标签,数组,部分平台支持为分享内容设置标签,可以使用这个字段 |
isPublic | 印象笔记和flickr的字段,表示是否公开 |
isFriend | flickr和VK的字段,表示是否公开给自己的朋友 |
isFamily | flickr的字段,表示是否公开给自己的家人 |
safetyLevel | flickr的字段,表示安全级别:1为安全级、2为辅导级、3为限制级 |
contentType | flickr的字段,表示相册类型:1为相片、2为屏幕截图、3为其他 |
hidden | flickr的字段,表示是否隐藏图片 |
venueName | foursquare的字段,表示分享位置的名称 |
venueDescription | foursquare的字段,表示分享位置的描述 |
latitude | 分享位置的维度 |
longitude | 分享位置的经度 |
imageUrl | 待分享的网络图片 |
comment | 对分享内容的评价。区别于text,评论一般共应用的用户自己填写,部分平台支持此字段 |
titleUrl | 分享内容标题的链接地址 |
url | 分享内容的url、在微信和易信中也使用为视频文件地址 |
address | 邮箱地址或者短信电话号码,一般在邮箱或者短信中使用 |
site | QQ空间的字段,标记分享应用的名称 |
siteUrl | QQ空间的字段,标记分享应用的网页地址 |
gropuId | VK的字段,表示图片所属的组ID。如果不设置此字段,ShareSDK会将组ID设置为ShareSDK所在的组 |
extInfo | Wecaht的字段,分享应用时,可以选择分享二进制文件或者脚本,此字段用来设置分享应用中的脚本 |
shareType | 微信和易信的字段,分享内容的类型: 分别为Platform.SHARE_TEXT(分享文本), Platform.SHARE_IMAGE(分享图片), Platform.SHARE_WEBPAGE(分享网页,既图文分享), Platform.SHARE_MUSIC(分享音频), Platform.SHARE_VIDEO(分享视频), Platform.SHARE_APPS(分享应用,仅微信支持), Platform.SHARE_FILE(分享文件,仅微信支持) Platform.SHARE_EMOJI(分享表情,仅微信支持) |
musicUrl | 微信和易信的字段,分享音频时的音频文件网络地址 |
imageData | 微信和易信的字段,各类分享内容中的图片bitmap对象,可以替代imagePatd或者imageUrl |
autdor | 有道云笔记的字段,表示分享内容的作者 |
customFlag | 自定义分享标签 |
分享类型:
分享文本 | shareType(Platform.SHARE_TEXT) | title | text | ||||
分享图片 | shareType(Platform.SHARE_IMAGE) | title | text(设置了不会显示,可选参数) | imagePath | |||
imageUrl | |||||||
imageData | |||||||
分享音乐 | shareType(Platform.SHARE_MUSIC) | title | text(朋友圈不显示此字段) | imagePath | musicUrl | url(消息点击后打开的页面) | |
imageUrl | |||||||
imageData | |||||||
分享视频 | shareType(Platform.SHARE_VIDEO) | title | text(朋友圈不显示此字段) | imagePath | url(视频网页地址) | ||
imageUrl | |||||||
imageData | |||||||
分享网页 | shareType(Platform.SHARE_WEBPAGE) | title | text(朋友圈不显示此字段) | imagePath | url | ||
imageUrl | |||||||
imageData | |||||||
分享文件 | shareType(Platform.SHARE_FILE) | title | text(朋友圈不显示此字段) | imagePath | filePath | ||
imageUrl | |||||||
imageData | |||||||
分享表情 | shareType(Platform.SHARE_EMOJI) | title | text(朋友圈不显示此字段) | imagePath | |||
imageUrl | |||||||
imageData | |||||||
分享小程序 | shareType(Platform.SHARE_WXMINIPROGRAM) | title | setWxUserName("小程序原始ID") | setWxPath("小程序页面路径") | url | text | imagePath |
imageUrl | |||||||
imageData |
上述字段中和本地路径有关的,全部使用“Path”结尾,如imagePath;和网络路劲有关的,使用“Url”结尾,如imageUrl。本地图片最好使用后缀名,否则POST文件时,可能无法正确计算文件的MIME值,从而导致发送失败。
针对主流平台说明可以参考下面具体说明(非maven的集成方式)
上述字段中和本地路径有关的,全部使用“Path”结尾,如imagePath;和网络路劲有关的,使用“Url”结尾,如imageUrl。本地图片最好使用后缀名,否则POST文件时,可能无法正确计算文件的MIME值,从而导致发送失败。
关于登录:
Toast.makeText(MainActivity.this, "Wechat登录开始", Toast.LENGTH_SHORT).show();
final Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
/*final Platform qq = ShareSDK.getPlatform(QQ.NAME);*/
/*final Platform sinaweibo = ShareSDK.getPlatform(SinaWeibo.NAME);*/
if (wechat.isClientValid()) {
//客户端可用
}
if (wechat.isAuthValid()) {
wechat.removeAccount(true);
}
wechat.setPlatformActionListener(new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, final HashMap<String, Object> hashMap) {
/*platform.getDb().exportData()获取用户数据*/
Log.d("ShareSDK", "onComplete ----> 登录成功" + platform.getDb().exportData());
platform.getDb().getUserId();
// 这里授权成功跳转到程序主界面了
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
Log.d("ShareSDK", "onError ----> 登录失败" + throwable.toString());
Log.d("ShareSDK", "onError ----> 登录失败" + throwable.getStackTrace().toString());
Log.d("ShareSDK", "onError ----> 登录失败" + throwable.getMessage());
}
@Override
public void onCancel(Platform platform, int i) {
Log.d("ShareSDK", "onCancel ----> 登录取消");
}
});
wechat.SSOSetting(false);
wechat.showUser(null);
申请第三方配置:
申请微信配置:
微信开发者平台
https://open.weixin.qq.com
注意事项:
微信会缓存包信息、或者appid等信息,若第一次没有调起登录、分享,修改appid等配置信息后,要去清除微信的缓存信息,否则会无效
md5分为发布版和开发板
最终打包一定要改回发布版的MD5,平常开发时需要改为开发版的MD5,否则会提示签名不一致