一、获取ShareSDK的appkey
为了集成ShareSDK,您首先需要到ShareSDK官方网站注册并且创建应用,添加ShareSDK,获得ShareSDK的Appkey,具体步骤点击这里查看。
注意:如果不使用gradle集成,使用jar包集成请参考这里。
二、集成引用
现在ShareSDK支持gradle集成的方式,目前可以不需要下载jar包进行配置集成,如果不想使用gradle集成,可以点击这里查看。
1、打开项目根目录的build.gradle,在buildscrip–>dependencies 模块下面添加 classpath ‘com.mob.sdk:MobSDK:+’,如下所示;
1 2 3 4 5 6 7 8 9 10 11 |
buildscript { repositories { jcenter() } dependencies { ... classpath 'com.mob.sdk:MobSDK:+' } } |
2、在使用到Mob产品的module下面的build.gradle文件里面添加引用
1 |
apply plugin: ‘com.mob.sdk’ |
3、然后添加MobSDK方法,配置mob的key和秘钥 (与第三步是一个gradle中;注意:MobSDK方法是配置到文件根目录,与android并列,不要配置到android里面哦)
如果还没有key的,申请Mob的appkey与appsecret请点击这里查看
Onekeyshare是ShareSDK的GUI界面,如果不需要,则需要添加”gui false”,因为默认是使用gui,version字段为SDK的版本号,不设置则使用最新的版本;
1 2 3 4 5 6 7 |
MobSDK { appKey "d580ad56b4b5" appSecret "7fcae59a62342e7e2759e9e397c82bdd" ShareSDK {} } |
4、maven集成方式可以在Mob产品的module下面的build.gradle文件里面配置ShareSDK各个社交平台的key信息
注意:其中的devInfo
为来自社交平台的应用信息,如果需要其他的平台配置,可以参考下面的字段说明,或者参考demo中的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
MobSDK { appKey "d580ad56b4b5" appSecret "7fcae59a62342e7e2759e9e397c82bdd" ShareSDK { //平台配置信息 devInfo { SinaWeibo { appKey "568898243" appSecret "38a4f8204cc784f81f9f0daaf31e02e3" callbackUri "http://www.sharesdk.cn" shareByAppClient false } Wechat { appId "wx4868b35061f87885" appSecret "64020361b8ec4c99936c0e3999a9f249" } QQ { appId "100371282" appKey "aed9b0303e3ed1e27bae87c33761161d" } Facebook { appKey "1412473428822331" appSecret "a42f4f3f867dc947b9ed6020c2e93558" callbackUri "https://mob.com" } } } } |
注:如果您没有在AndroidManifest
中设置appliaction
的类名,MobSDK会将这个设置为com.mob.MobApplication
,但如果您设置了,请在您自己的Application类中调用:
1 |
MobSDK.init(this); |
并且在Manifest清单文件中配置:tools:replace=”android:name”,如下所示:
1 2 |
<application tools:replace="android:name"> |
5、devInfo中配置的字段说明
配置支持的平台全部属性字段有以下这些(注:区分大小写):
id | 数字,平台的id,可以设置为任何不重复的数字,(可选字段) |
sortId | 数字,九宫格界面平台的排序,越小越靠前,可以设置为任何不重复的数字,(可选字段) |
appId | 文本,对应ShareSDK.xml中的AppId、ClientID、ApplicationId、ChannelID |
appKey | 文本,对应ShareSDK.xml中的AppKey、ConsumerKey、ApiKey、OAuthConsumerKey |
appSecret | 文本,对应ShareSDK.xml中的AppSecret、ConsumerSecret、SecretKey、Secret、ClientSecret、ApiSecret、ChannelSecret |
callbackUri | 文本,对应ShareSDK.xml中的RedirectUrl、RedirectUri、CallbackUrl |
shareByAppClient | 布尔值,shareByAppClient标识是否使用客户端分享 |
bypassApproval | 布尔值,bypassApproval表示是否绕过审核 |
enable | 布尔值,enable字段表示此平台是否启用 |
userName | 文本,userName在微信小程序中使用 |
path | 文本,path在微信小程序中使用 |
hostType | 文本,表示服务器类型,在YouDao和Evernote中使用 |
withShareTicket | 布尔值,分享微信小程序时,分享出去的小程序被二次打开时可以获取到更多信息,true为能获取,反之不能;仅在微信中使用 |
miniprogramType | 数字,分享微信小程序时,表示小程序的开发状态,取值范围:0-正式,1-开发,2-体验,仅在微信中使用 |
配置完以上信息后同步(sync)一下代码就可以调用相关的接口了
其中每个第三方平台需要的字段可以参考demo中的配置
6、其中ShareSDK中支持的第三方平台及字段如下所示:
任何配置在devInfo
下的社交平台都是可用的,他们包括:
分类 | 平台名称 |
常用平台 | SinaWeibo(新浪微博)、Wechat(微信好友)、WechatMoments(微信朋友圈)、QQ(QQ好友)、Facebook、FacebookMessenger |
其它主流平台 | TencentWeibo(腾讯微博)、QZone(QQ空间)、Renren(人人网)、Twitter、Douban(豆瓣)、Tumblr、GooglePlus(Google+)、Pinterest、Line、Instagram、Alipay(支付宝好友)、AlipayMoments(支付宝朋友动态)、Youtube、Meipai(美拍) |
其它平台 | WechatFavorite(微信收藏)、KaiXin(开心网)、Email(电子邮件)、ShortMessage(短信)、YouDao(有道云笔记)、Evernote(印象笔记)、LinkedIn(领英)、FourSquare、Flickr、Dropbox、VKontakte、Yixin(易信)、YixinMoments(易信朋友圈)、Mingdao(明道)、KakaoTalk、KakaoStory、WhatsApp、Pocket、Instapaper、Dingding(钉钉)、Telegram |
三、添加应用信息
有三种方式
第一种:在ShareSDK的应用管理后台中配置,注意此方法devinfo中仍需要配置相应平台的字段来加载平台的使用,可以不再devinfo中配置key等信息,如果以后更改了注册信息可以直接从网上更改,而不用重新发布新版本进行更新。(优先级最高)。
第二种:通过代码配置“setPlatformDevInfo(String, HashMap<String, Object>)”方法。(优先级中)。
第三种:通过build.gradle中的“devinfo”文件来配置,此方式会以明文存在,但这种方式最为简单。(优先级最低)。
这三种方式开发者可以自行选择,不过这三种设置方式各有区别:第一种方式可以实现“动态配置应用信息”的功能,但是一旦脱离网络,ShareSDK可能无法实现正常的分享和登录功能
第三种方式是优先级最低的方式,但是它最为方便、集中;最后使用代码设置的方式是最灵活的方式,第二种方式开发者可以在代码里面写死应用信息,也可以通过私有协议,从自己的服务器上动态获取应用注册信息,其优先级居第一种和第二种之间。
ShareSDK的每一个平台都具备SortId、Id、Enable三个字段,除此之外的字段(如新浪微博的AppKey、AppSecret、RedirectUrl、ShareByAppClient等字段)需要到目标平台上注册应用以后得到,请正确填写这些字段的数据,否则ShareSDK无法完成授权,则后续的其它操作也将无法执行。
代码配置注册信息示例(演示初始化新浪微博配置信息) 因为各个分享平台可以设置的配置信息不同,具体分享平台需要设置哪些配置信息请参考ShareSDK.xml中的配置;
1 2 3 4 5 6 7 8 9 |
HashMap<String,Object> hashMap = new HashMap<String, Object>(); hashMap.put("Id","1"); hashMap.put("SortId","1"); hashMap.put("AppKey","568898243"); hashMap.put("AppSecret","38a4f8204cc784f81f9f0daaf31e02e3"); hashMap.put("RedirectUrl","http://www.sharesdk.cn"); hashMap.put("ShareByAppClient","true"); hashMap.put("Enable","true"); ShareSDK.setPlatformDevInfo(SinaWeibo.NAME,hashMap); |
关于应用信息不同字段的更详细解释,可以参考ShareSDK.xml文件头部的说明。
四、添加代码
添加代码现说下ShareSDK配置appkey和appsecret的配置,前面配置Manifest文件的时候已经有说明在application中配置节点等;
配置AppKey和AppSecret有两种方式:
(1)通过在build.gradle配置
(2)通过代码配置
如果选择通过代码配置,则不需要继承MobApplication,只要在使用ShareSDK之前,调用以下代码:
1 2 |
// 通过代码注册你的AppKey和AppSecret MobSDK.init(context, "你的AppKey", "你的AppSecret"); |
接下来就可以调用授权、获取资料、分享等操作了,详细的使用方法,请参考:
注意:到这里ShareSDK集成完毕,如需要做进一步的第三方登录授权,请点击这里查看登录;
分享的可以继续看下面的说明
onekeyshare分享调用九宫格方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
private void showShare() { OnekeyShare oks = new OnekeyShare(); //关闭sso授权 oks.disableSSOWhenAuthorize(); // 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法 //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name)); // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用 oks.setTitle(getString(R.string.share)); // titleUrl是标题的网络链接,仅在人人网和QQ空间使用 oks.setTitleUrl("http://sharesdk.cn"); // text是分享文本,所有平台都需要这个字段 oks.setText("我是分享文本"); // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数 oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片 // url仅在微信(包括好友和朋友圈)中使用 oks.setUrl("http://sharesdk.cn"); // comment是我对这条分享的评论,仅在人人网和QQ空间使用 oks.setComment("我是测试评论文本"); // site是分享此内容的网站名称,仅在QQ空间使用 oks.setSite(getString(R.string.app_name)); // siteUrl是分享此内容的网站地址,仅在QQ空间使用 oks.setSiteUrl("http://sharesdk.cn"); // 启动分享GUI oks.show(this); } |
六、为不同平台定义差异化分享内容(不需要可以忽略)
快捷分享允许开发者设置了统一的分享模板以后,为不同平台设置差别化的分享内容。为了实现这个功能,需要为快捷分享提供一个ShareContentCustomizeCallback的实例,并参考下面的伪代码设置到快捷分享中:
1 2 3 4 5 6 |
OnekeyShare oks = new OnekeyShare(); // 参考代码配置章节,设置分享参数 oks.setText("分享文本1"); //通过OneKeyShareCallback来修改不同平台分享的内容 oks.setShareContentCustomizeCallback(new ShareContentCustomizeDemo()); oks.show(context); |
ShareContentCustomizeCallback是一个接口,使用时需要实现其onShare(Platform, ShareParams)方法。此方法被回调的时候会传递一个即将执行分享的平台实例和即将被分享的分享内容(ShareParams)。开发者可以通过修改这个ShareParams参数完成分享内容根据平台的差异化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/** * 快捷分享项目现在添加为不同的平台添加不同分享内容的方法。 *本类用于演示如何区别Twitter的分享内容和其他平台分享内容。 */ public class ShareContentCustomizeDemo implements ShareContentCustomizeCallback { public void onShare(Platform platform, ShareParams paramsToShare) { // 改写twitter分享内容中的text字段,否则会超长, // 因为twitter会将图片地址当作文本的一部分去计算长度 if (Twitter.NAME.equals(platform.getName())) { String text = platform.getContext().getString(R.string.share_content_short); paramsToShare.setText(text); } } } |
七、自定义外部回调(不需要可以忽略)
新版本的快捷分享添加了一个callback的Extra,可以在启动快捷分享的时候,设置一个callback给它,于是快捷分享操作结束以后,不再调用自己的callback,而是调用从外部设置进来的callback。设置方法和其他的extra类似:
1 2 3 4 5 |
OnekeyShare oks = new OnekeyShare(); // 参考代码配置章节,设置分享参数 // 设置自定义的外部回调 oks.setCallback(new OneKeyShareCallback()); oks.show(context); |
上述代码中的OneKeyShareCallback是一个实现了PlatformActionListener的类,因此它有onComplete、onError和onCancel等方法。启动快捷分享的时候将OneKeyShareCallback的类名传递进去,快捷分享自己会尝试创建其实例,如果创建失败或者没有传递callback字段,则使用默认的callback,如果成功,则以后会将分享结果给这个类处理。
八、授权页面标题栏去掉ShareSDK Logo部分(不需要可以忽略)
更多的授权页面UI修改参考下面这个demo,比如隐藏标题栏、标题文字和样式修改、反回按钮修改、启动授权页面时的动画自定义或禁用动画等;可以参考《自定义授权界面》
参考sdk说明文档,继承一个AuthorizeAdapter的类,然后重写其onCreate方法,并在方法的开始添加
hideShareSDKLogo(),具体步骤可以参考官网例子Sample下的MyAdapter.java文件,如图所示:
保存以后,将此类注册到AndroidManifest.xml的ShareSDKUIShell下面,如图所示:
九、混淆设置
只需要配置如下混淆处理,其他的jar包及onekeyshare代码不需要特殊处理;
1 2 3 4 5 6 7 8 |
-keep class cn.sharesdk.**{*;} -keep class com.sina.**{*;} -keep class **.R$* {*;} -keep class **.R{*;} -keep class com.mob.**{*;} -dontwarn com.mob.** -dontwarn cn.sharesdk.** -dontwarn **.R$* |