集成ShareSDK

关于集成:

官网集成介绍

在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,否则会提示签名不一致

获取开发版和发布版的信息

发布了213 篇原创文章 · 获赞 12 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/a1003434346/article/details/101759024