目前越来越多的app需要分享功能,而分享的平台又越来越多,如果根据业务去每个平台集成SDK工作量又太大,因此,今天给大家推荐一个Mob下的 ShareSDK多平台集成分享,基本囊括了你所有想分享的平台。
1.框架介绍
2.接入说明
3.常见问题
1.框架介绍
http://www.mob.com/product/sharesdk
先上链接,着急同学们可以直接跳走了,不着急的听咱细细道来
然后看看效果,这是个QQ分享出去的效果,包含了四个内容,标题、内容、缩略图以及点击跳转的url
之后这是支持的分享平台,绝对够用了对吧~
最后再说下使用分享方式,一种可以用它内部集成好的OnekeyShare库,基本上选择好需要分享平台还有设置上AppKey等信息基本就能用了,很方便不过UI不能定制,测试学习还行,实际做项目还是需要自己封装适配自己项目。
2.接入说明
首先当然是要在Mob平台以及其他想分享的平台注册自己app信息了,在此需要注意的是,如果是公司项目一定要公司相关人员注册,因为好像需要带有公司的一些信息,如软著或者营业执照等;并且有专人管理,不然有员工离职再登录上去干点啥就是损失了...曾经有个不成熟的小产品不知道去哪搞账号,让我自己注册一个,哈哈
现只讨论个人的 ,在Mob下注册登录后,创建app相关信息,然后选择ShareSDK,会获得AppKey和App Secret信息
然后就是SDK集成了,android下推荐Gradle集成方式
具体集成步骤请参考:http://wiki.mob.com/sdk-share-android-3-0-0/
值得注意的是,如果不使用OneKeyShare库则需设置Gui为false,下面是在需要分享module下build.gradle配置
//shareSDK配置信息
MobSDK {
//http://www.mob.com/developer/login
appKey "xxxxxxx"
appSecret "xxxxxxxxxxxxx"
gui false //不使用默认UI OnekeyShare库
ShareSDK {
devInfo {
SinaWeibo {
appKey "xxxxxxx"
appSecret "xxxxxxxxxxxxx"
callbackUri "http://www.sharesdk.cn"
shareByAppClient true //是否使用客户端分享
}
//https://open.tencent.com/
QQ {
appId "xxxxxxx"
appKey "xxxxxxxxxxxxx"
shareByAppClient true
bypassApproval false //绕过审核标记
}
Wechat {
appId "xxxxxxx"
appSecret "xxxxxxxxxxxxx"
shareByAppClient true
bypassApproval false
}
WechatMoments {
appId "xxxxxxx"
appSecret "xxxxxxxxxxxxx"
shareByAppClient true
bypassApproval false
}
WechatFavorite {
appId "xxxxxxx"
appSecret "xxxxxxxxxxxxx"
shareByAppClient true
}
}
}
}
根据步骤配置完检查下
1.根目录的build.gradle添加依赖
2.需要使用的module下build.gradle添加配置信息
3.自定义app下初始化
4.混淆设置
5.添加相关权限
然后还没完呢,开始平台的 一些设置,在此只讲解下微信、朋友圈、微信收藏、QQ、新浪微博这几个根据常用的平台,其中微信系列的三个都是用微信开发平台注册的同一个appId
QQ分享说明:http://bbs.mob.com/forum.php?mod=viewthread&tid=24653&extra=page%3D2
微信分享说明:http://bbs.mob.com/thread-24656-1-1.html
新浪微博分享说明:http://bbs.mob.com/forum.php?mod=viewthread&tid=24689&page=1&extra=#pid61902
以上配置步骤开始都是手动下载ShareSDK的步骤,因为ShareSDK之前我们已经使用Gradle配置好了,直接参考之后相关平台步骤即可,步骤中在shareSDk.xml中配置的信息我们在module下build.gradle配置也一样
根据以上步骤配置完再检查下
1.Manifest中注册ShareSDK的activity、QQ的activity、微信的activity
2.需要使用的module下build.gradle的各个平台配置信息(appId...)
3.app包名和各个平台注册包名是否一致
到此,基本上配置告一段落,若使用OneKeyShare,设置好分享主体就可以分享了
public static void showShare() {
OnekeyShare oks = new OnekeyShare();
oks.setImageUrl(“http://firicon.fir.im/baa18a6d779c597888d685f1159070df5b4f2912”);
oks.setTitleUrl(“http://www.baidu.com”);
oks.setText(“text”);
oks.setTitle(“标题”);
oks.setPlatform(QQ.NAME);
oks.show(context);
}
然后如果是自定义封装,最主要的是各个平台的参数略有不同
详情参考:http://wiki.mob.com/%e4%b8%8d%e5%90%8c%e5%b9%b3%e5%8f%b0%e5%88%86%e4%ba%ab%e5%86%85%e5%ae%b9%e7%9a%84%e8%af%a6%e7%bb%86%e8%af%b4%e6%98%8e/
根据设计稿实现个PopUpwindow,然后根据不同平台点击设置参数
case R.id.normalshare_wechat:
if (!CommonUtil.isWeixinAvilible(App.getInstance())) {
MyToast.showToast(App.getInstance(), "检查到您手机没有安装微信,请安装后使用该功能");
return;
}
Wechat.ShareParams wechatSP = new Wechat.ShareParams();
wechatSP.setShareType(Wechat.SHARE_WEBPAGE);
wechatSP.setTitle(title);
wechatSP.setText(text);
wechatSP.setUrl(url);
wechatSP.setImagePath(imagePath);
wechatSP.setImageUrl(imageUrl);
plat = ShareSDK.getPlatform(Wechat.NAME);
plat.share(wechatSP);
break;
case R.id.normalshare_wechat_moments:
if (!CommonUtil.isWeixinAvilible(App.getInstance())) {
MyToast.showToast(App.getInstance(), "检查到您手机没有安装微信,请安装后使用该功能");
return;
}
Wechat.ShareParams wechatSP2 = new Wechat.ShareParams();
wechatSP2.setShareType(WechatMoments.SHARE_WEBPAGE);
wechatSP2.setTitle(title);
wechatSP2.setText(text);
wechatSP2.setUrl(url);
wechatSP2.setImagePath(imagePath);
wechatSP2.setImageUrl(imageUrl);
plat = ShareSDK.getPlatform(WechatMoments.NAME);
plat.share(wechatSP2);
break;
case R.id.normalshare_wechat_favorite:
if (!CommonUtil.isWeixinAvilible(App.getInstance())) {
MyToast.showToast(App.getInstance(), "检查到您手机没有安装微信,请安装后使用该功能");
return;
}
Wechat.ShareParams wechatSP3 = new Wechat.ShareParams();
wechatSP3.setShareType(WechatFavorite.SHARE_WEBPAGE);
wechatSP3.setTitle(title);
wechatSP3.setText(text);
wechatSP3.setUrl(url);
wechatSP3.setImagePath(imagePath);
wechatSP3.setImageUrl(imageUrl);
plat = ShareSDK.getPlatform(WechatFavorite.NAME);
plat.share(wechatSP3);
break;
case R.id.normalshare_qq:
if (!CommonUtil.isQQClientAvailable(App.getInstance())) {
MyToast.showToast(App.getInstance(), "检查到您手机没有安装QQ,请安装后使用该功能");
return;
}
QQ.ShareParams qqSP = new QQ.ShareParams();
qqSP.setShareType(QQ.SHARE_WEBPAGE);
qqSP.setTitle(title);
qqSP.setText(text);
qqSP.setUrl(url);
qqSP.setTitleUrl(titleUrl);
qqSP.setSite(site);
qqSP.setSiteUrl(siteUrl);
qqSP.setImagePath(imagePath);
qqSP.setImageUrl(imageUrl);
plat = ShareSDK.getPlatform(QQ.NAME);
plat.share(qqSP);
break;
case R.id.normalshare_sinaweibo:
SinaWeibo.ShareParams weiboSP = new SinaWeibo.ShareParams();
weiboSP.setShareType(SinaWeibo.SHARE_WEBPAGE);
weiboSP.setTitle(title);
//微博分享链接带入描述,不设置url,否则不能显示图片
weiboSP.setText(text + "\n" + url);
// weiboSP.setUrl(url);
weiboSP.setImagePath(imagePath);
weiboSP.setImageUrl(imageUrl);
plat = ShareSDK.getPlatform(SinaWeibo.NAME);
plat.share(weiboSP);
break;
值得注意的是,新浪微博的链接一般是在描述中带入的,如:"热烈庆祝改革开放四十年#https://.....#"。如果设置url则显示不了图片。
3.常见问题
<1.配置在哪里
一般直接在app的build.gradle配置,若是需要模块化单独一个module,则需要app依赖该module
<2.gui开关
同时也是OneKeyShare库的开关,推荐自己学习时打开,因为有很多注释很有参考价值,实际项目中就关掉,减小体积
<3.QQ、微信常见问题
别忘了在Manifest中注册相关activity;
QQ分享,缩略图链接不能是ip和接口的格式,否则会显示不出;
微信分享,使用需要带有正式版签名,或者根据之前说明文档配置签名,否则客户端拉不起来
<4.分享成功接口
微信成功回调接口已修正,请大家注意
两种方法
一种是根据包名判断
public static boolean isWeixinAvilible(Context context) {
final PackageManager packageManager = context.getPackageManager();// 获取packagemanager
List pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
if ("com.tencent.mm".equals(pn)) {
return true;
}
}
}
return false;
}
还有一种是根据分享平台api判断
Platform plat = ShareSDK.getPlatform(Wechat.NAME);
if (!plat.isClientValid()) {
MyToast.showToast(App.getInstance(), "检查到您手机没有安装微信,请安装后使用该功能");
return;
}
因为在部分机型上有一种方法失效的情况,因此推荐大家同时使用两种方法判断,若都不满足则判断未安装
<6.shareSDk.xml在哪
开始集成我也疑惑的问题,这个是手动下载SDK集成才有的,使用Gradle集成没有的,不过里面好多注释很有价值,推荐大家也下载下来看看
<7.图片参数
图片参数有个三个,imagePath、imageUrl、imageData
但是平台不同支持的也不同,所以大家自己封装的时候推荐只使用imageUrl和imagePath,imagePath可以作为当imageUrl为null的占位图,如果两个同时设置好像是显示imageUrl,谨慎期间大家自行再试下
<8.客服
这个主要是我推荐ShareSDK的原因,这个客服是真的强大,基本上有关分享的什么问题都很快能给解决,有时候懒得找文档了,直接加了QQ问就好,不过有时候会排队,哈哈
之前分享都是各个平台各自集成,真的是麻烦至极,这个SDK简单易用,功能强大,客服给力,因此推荐大家使用。基本上我遇到的问题上面都提到了,还有什么问题欢迎大家一起来讨论