ShareSDK集成及自定义封装使用
市面上APP使用较为广泛的分享功能SDK
ShareSDK集成开发的笔记
目录:
- 基本概述
- 集成步骤
- jar包引入
- 分享平台信息配置
- 工程信息配置
- 开发使用
- 基本API使用
- 封装ShareManager
- 自定义UI界面
基本概述
- 优点:
- 高度的可定制性:包括UI 或者是具体的分享平台的jar包的引入
- 接入十分简单快捷
- 支持平台广泛
集成步骤
- 在官网完成注册
- 进入后台,创建自己的应用
- 下载Android SDK的Sample,这里面有你需要的一切
拷贝jar包
- Sample的libs下有所有支持分享的平台的jar包,根据需要拷贝进自己的工程
-
MobCommons-2017.0216.1054.jar
,MobTools-2017.0216.1054.jar
,ShareSDK-Core-2.8.1.jar
这三个是ShareSDK的核心,必须要拷贝,记得Add As Library
-
剩下的就是平台的对应jar,名字很清晰(只截取了部分)
ShareSDK.xml配置
- 将asset目录下的ShareSDK.xml拷进自己的assets目录下
- 这个文件的主要功能就是配置你分享平台的应用信息(你也可以在代码中完成这部分的功能,只是并不推荐)
- 不同平台的APP_ID 和APP_KEY的获取网址链接,ShareSDK也很贴心给给出了
表格中的第一项
是必须的,其中的AppKey是您在ShareSDK上注册的开发者帐号的AppKey
所有集成到您项目的平台都应该为其在表格中填写相对应的开发者信息,以微信朋友圈为例:
SortId:此平台在分享列表中的位置,由开发者自行定义,可以是任何整型数字,数值越大越靠后
AppKey、AppSecret和RedirectUrl是您在新浪微博上注册开发者信息和应用后得到的信息
Id:一个保留的识别符,整型,ShareSDK不使用此字段,供您在自己的项目中当作平台的识别符。
Enable:此平台是否有效,布尔值,默认为true,如果Enable为false,即便平台的jar包
已经添加到应用中,平台实例依然不可获取。
BypassApproval:这个是微信独有的标识,作用是是否跳过打包识别,因为微信分享是需要识别签名的(但是开发中不可能每次测试都打包完整签名),true就是跳过签名识别,false就是开启。 注意:开启跳过签名只能使用微信分享的部分功能,不过也足够开发测试了。
ShareByAppClient : 这个确定是否优先使用客户端分享
各个平台注册应用信息的地址如下:
新浪微博 http://open.weibo.com
微信好友 http://open.weixin.qq.com
Facebook https://developers.facebook.com
Twitter https://dev.twitter.com
人人网 http://dev.renren.com
开心网 http://open.kaixin001.com
搜狐微博 http://open.t.sohu.com
网易微博 http://open.t.163.com
豆瓣 http://developers.douban.com
有道云笔记 http://note.youdao.com/open/developguide.html#app
印象笔记 https://dev.evernote.com/
Linkedin https://developer.linkedin.com
FourSquare https://developer.foursquare.com/
搜狐随身看 https://open.sohu.com/
Flickr http://www.flickr.com/services/
Pinterest http://developers.pinterest.com/
Tumblr http://www.tumblr.com/developers
Dropbox https://www.dropbox.com/developers
Instagram http://instagram.com/developer#
VKontakte http://vk.com/dev
易信好友 http://open.yixin.im/
明道 http://open.mingdao.com/
Line http://media.line.me/zh-hant/ https://developers.line.me
Pocket http://getpocket.com/developer/apps/new
KakaoTalk https://developers.kakao.com/
KakaoStory https://developers.kakao.com/
Plurk http://www.plurk.com/API
AndroidManifest.xml配置
这里只列举了其中一部分的配置
- 微信分享需要新建对应的wxapi包然后拷贝WXEntryActivity到工程中
- QQ分享的scheme,tencent字段后面跟着在QQ获取的APP_ID
- 需要更多的分享平台可以看详细Sample
至此分享功能所需要的工程配置到此结束
开发使用
基本API使用
使用十分方便
//初始化,最好放在程序的入口
ShareSDK.initSDK(this);
//获取对应的分享平台
Platform qqPlatform = ShareSDK.getPlatform(QQ.NAME);
//设置分享回调
qqPlatform.setPlatformActionListener(new PlatformActionListener(){
//实现监听事件
......
});
//设置分享内容
QQ.ShareParams params = new QQ.ShareParams();
//分享
qqPlatform.share(params);
封装ShareManager
- 首先封装一个我们自己分享的数据类
/**
* @author 要分享的数据实体
*
*/
public class ShareData {
/**
* 要分享到的平台
*/
public ShareManager.PlatofrmType mPlatformType;
/**
* 要分享到的平台的参数
*/
public ShareParams mShareParams;
}
- 对于平台我们使用枚举来控制分享的平台
/**
* @author 应用程序需要的平台
*/
public enum PlatofrmType {
QQ, QZone, WeChat, WechatMoments,SinaWeibo;
}
- 对于分享功能管理类使用单例模式
/**
* 线程安全的单例模式
*/
public static ShareManager getInstance() {
if (mShareManager == null) {
synchronized (ShareManager.class) {
if (mShareManager == null) {
mShareManager = new ShareManager();
}
}
}
return mShareManager;
}
- 分享功能的实现
/**
* 分享数据到不同平台
*/
public void shareData(ShareData shareData, PlatformActionListener listener) {
switch (shareData.mPlatformType) {
case QQ:
mCurrentPlatform = ShareSDK.getPlatform(QQ.NAME);
break;
case QZone:
mCurrentPlatform = ShareSDK.getPlatform(QZone.NAME);
break;
case WeChat:
mCurrentPlatform = ShareSDK.getPlatform(Wechat.NAME);
break;
case WechatMoments:
mCurrentPlatform = ShareSDK.getPlatform(WechatMoments.NAME);
break;
case SinaWeibo:
mCurrentPlatform=ShareSDK.getPlatform(SinaWeibo.NAME);
break;
default:
break;
}
mCurrentPlatform.setPlatformActionListener(listener); //由应用层去处理回调,分享平台不关心。
mCurrentPlatform.share(shareData.mShareParams);
}
- 至此,我们对分享的基础功能就封装完了,更多额外的拓展功能,大家可以根据自己的项目实际来添加
自定义分享UI界面
自定义这一块,不使用ShareSDK提供的OneKeyStore,而使用自己写的一个dialog来实现
- 自定义Dialog继承Dialog,初始化UI界面数据
public ShareDialog(Context context, boolean isShowDownload) {
super(context, R.style.SheetDialogStyle);
mContext = context;
dm = mContext.getResources().getDisplayMetrics();
this.isShowDownload = false;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_share_layout);
initView();
}
private void initView() {
/**
* 通过获取到dialog的window来控制dialog的宽高及位置
*/
Window dialogWindow = getWindow();
dialogWindow.setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = dm.widthPixels; //设置宽度
dialogWindow.setAttributes(lp);
//一系列FindViewById
......
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.weixin_layout:
shareData(ShareManager.PlatofrmType.WeChat);
break;
case R.id.moment_layout:
shareData(ShareManager.PlatofrmType.WechatMoments);
break;
case R.id.qq_layout:
shareData(ShareManager.PlatofrmType.QQ);
break;
case R.id.qzone_layout:
shareData(ShareManager.PlatofrmType.QZone);
break;
case R.id.sinaWeibo_layout:
shareData(ShareManager.PlatofrmType.SinaWeibo);
break;
case R.id.cancel_view:
dismiss();
break;
}
}
- 分享数据的设置,就是set的数据,顺带一提,链式编程效果更佳
/**
* 分享的数据
*/
private int mShareType; //指定分享类型
private String mShareTitle; //指定分享内容标题
private String mShareText; //指定分享内容文本
private String mSharePhoto; //指定分享本地图片
private String mShareTileUrl;
private String mShareSiteUrl;
private String mShareSite;
private String mUrl;
private String mResourceUrl;
//只列举一个set的链式
public ShareDialog setShareTitle(String title) {
mShareTitle = title;
return this;
}
......
- 分享数据
/**
* 分享数据
*
* @param platofrm
*/
private void shareData(ShareManager.PlatofrmType platofrm) {
ShareData mData = new ShareData();
Platform.ShareParams params = new Platform.ShareParams();
params.setShareType(mShareType);
params.setTitle(mShareTitle);
params.setTitleUrl(mShareTileUrl);
params.setSite(mShareSite);
params.setSiteUrl(mShareSiteUrl);
params.setText(mShareText);
params.setImagePath(mSharePhoto);
params.setUrl(mUrl);
mData.mPlatformType = platofrm;
mData.mShareParams = params;
ShareManager.getInstance().shareData(mData, mListener);
}
- 回调监听,因为大多数应用里面分享功能都是公用的,所以 将回调监听也放在dialog里面而不同每次分享都是实现一个监听
private PlatformActionListener mListener = new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap hashMap) {
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
}
@Override
public void onCancel(Platform platform, int i) {
}
};
最后:
这里只做一个最基本简单的封装,大家可以根据业务需要再细化
如果有什么地方有疑问的,我建议直接去ShareSDK官网查阅开发文档