前段时间写了一篇关于友盟推送的文章,从阅读量来看,大家在这方面踩了很多坑,所以我觉得有必要来个全面的总结,给大家更好的过坑意见;
先从分享开始说吧
第一步集成SDK:官方文档说的很详细了,集成大家就看文档吧,我就总结一下要注意的地方:
微信,qq,短信等友盟的api都有了,不过为了方便自己调用,可以自定义一个接口:
/**
* Created by Administrator on 2018/1/5 0005.
* 分享回调
*/
public interface ShareHandler {
void shareSuccess();
void shareFailed(String msg);
void shareCancel();
}然后自定义一个分享的工具类
public class ShareUtils {
private Activity mContext;
public ShareUtils(Activity context) {
mContext = context;
}
private ShareHandler mShareHandler;
/**为方便参数的传递,把需要的参数封装为一个shareBean
* @param shareBean 分享参数类
*/
public void beginShare(ShareBean shareBean, ShareHandler shareHandler) {
mShareHandler = shareHandler;
UMWeb shareUrl = new UMWeb(shareBean.getUrl());
shareUrl.setTitle(shareBean.getTitle());
shareUrl.setDescription(shareBean.getDesc());
shareUrl.setThumb(new UMImage(mContext, R.mipmap.ic_launcher));
new ShareAction(mContext)
.withText(shareBean.getTitle())
.withMedia(shareUrl)
.setPlatform(shareBean.getType())
.setCallback(shareListener)
.share();
}
public UMShareListener shareListener = new UMShareListener() {
/**
* @descrption 分享开始的回调
* @param platform 平台类型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
// ToastUtils.showShortToast("share start");
}
/**
* @descrption 分享成功的回调
* @param platform 平台类型
*/
@Override
public void onResult(SHARE_MEDIA platform) {
// ToastUtils.showShortToast("share success");
if (mShareHandler != null)
mShareHandler.shareSuccess();
}
/**
* @descrption 分享失败的回调
* @param platform 平台类型
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
// ToastUtils.showShortToast("share failed" + t.getMessage());
if (mShareHandler != null)
mShareHandler.shareFailed(t.getMessage());
}
/**
* @descrption 分享取消的回调
* @param platform 平台类型
*/
@Override
public void onCancel(SHARE_MEDIA platform) {
// ToastUtils.showShortToast("share calcel");
if (mShareHandler != null)
mShareHandler.shareCancel();
}
};
}
shareBean也就几个参数
//分享 kotlin格式 不会kotlin的吧参数copy到自己的实体类即可
data class ShareBean(
val type: SHARE_MEDIA, //QQ
val url: String, //分享的Url
val title: String, //标题
val thumb: String, //图片地址
val desc: String //描述文字
)工具类写好了然后就是调用
private void share(SHARE_MEDIA platform) {
ShareUtils shareUtils = new ShareUtils(InvitingFriendActivity.this);
//这里的参数除了都可以从服务器获取,然后赋值就行
ShareBean shareBean = new ShareBean(platform, shareUrl, shareTitle, shareIcon, "");
shareUtils.beginShare(shareBean, new ShareHandler() {
@Override
public void shareSuccess() {
// ToastUtils.showShortToast("分享成功");
}
@Override
public void shareFailed(String msg) {
// ToastUtils.showShortToast("分享失败:" + msg);
}
@Override
public void shareCancel() {
// ToastUtils.showShortToast("分享取消");
}
});
}
/**因为qq和qq空间6.0以后有权限管理校验,这一步是校验,可以直接调用这个方法发起分享
* @param paltform pingtai
*/
public void checkPermissionToshare(final SHARE_MEDIA paltform) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//判断该应用是否有写SD卡权限,如果没有再去申请
if (ContextCompat.checkSelfPermission(InvitingFriendActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(new Consumer() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean) {
share(paltform);
} else {
ToastUtils.showShortToast("分享取消");
}
}
});
} else {
share(paltform);
}
}
}
调用示例
checkPermissionToshare(SHARE_MEDIA.QQ);下面是通过gradle配置,不打包release