SharedSDk相关的集成。第三方登陆及分享
ps:此篇文章属于转载,附原作者地址:http://www.jianshu.com/p/db4136d70226
最近很多项目中都是用到了第三方的登录和分享,虽然说可以按照官方文档去一步步实现,但总还是会遇到一些坑,下面我就说说我在项目中是怎么使用第三方的登录跟分享的(我这里使用的share sdk)。
1.注册账号:首先,我们需要在share sdk官网(http://www.mob.com)注册一个账号,然后登录,进入主界面,首先就是创建我们的应用了,在右上角点击“进入后台”,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-c6c447e2cacabc24.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
然后点击我们要使用的ShareSdk,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-55357688d78123dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.添加应用:鼠标移动到“应用”菜单,选择添加应用,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-130ed75213a46977.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.输入应用名称,并选择Android,点击添加,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-cd15c769bc829b5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
添加成功后会跳转我们创建的应用界面,并且可以看到我们分享所需要的App Key 和App Secret,创建好了应用,下一步就是在APP中的使用了,首先看一下官方文档,点击官方文档,找到我们需要的“安卓集成文档”,就到了如下界面:
![](http://upload-images.jianshu.io/upload_images/2120096-672345c717834599.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
按照右侧官方文档的流程,先配置一下我们的APP,主要是一下几个步骤:
(1)获取ShareSDK的AppKey ,这个在我们创建好应用了之后就已经有了
(2)下载sdk
(3)快速集成
(2)、(3)官网文档已经说的很清楚了,我这里就不再说明啦。
上面说了那么多,我们用的还是sharesdk的测试账号进行分享,下面就说说如何在我们的项目中用自己的账号进行分享和登录(在这之前首先要保证在上面的测试中,分享是没有问题的,没有出现崩溃什么的,再进行我们的下一步)
4:一般我们的项目中集成的有QQ、微信、新浪,下面我们就说说在一个项目中如何使用这三种平台进行分享和登录,第一次用的时候也是走了不少坑,希望我的文章能帮助你少走一些坑,首先我们的项目一般很少是个人的,大部分都是公司项目,所以要在这三种平台进行分享,首先要分别在这三个平台注册一个企业账号(注意:填写企业信息的时候三个平台要保持一致,不要问我为啥,为了少点坑,哈哈,如果三个平台的企业信息不一致,后面的审核APP会有很多问题,到时候又要回去改,真的是很麻烦),如果是个人,那你注册个人账号就可以了,下面我就用使用企业账号来举例,
(1).腾讯开放平台 http://wiki.open.qq.com
上面说了,我们要先注册账号,并填写信息,并通过审核,才有使用QQ进行第三方操作的资质呀,资质有了,先来就是该创建我们的应用了,
看图说话,如下:
![](http://upload-images.jianshu.io/upload_images/2120096-60a2c01fc2f6aea1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
点击“创建应用”
![](http://upload-images.jianshu.io/upload_images/2120096-ee67a4508c8f8dd9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
选择“移动应用 安卓” ,点击“创建应用”,继续看图:
![](http://upload-images.jianshu.io/upload_images/2120096-5a2f78b2e3370d92.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
选择“安卓应用类型”,根据自己的APP类型,自己选择,点击“确定”,看图:
![](http://upload-images.jianshu.io/upload_images/2120096-76799f5e2d1bf06c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
下面就是“完善信息”了,这里我也不用怎么说,该怎么写就怎么写,带*的必须写哦,需要注意的就是我们上传的安装包,可能不符合腾讯审核的规则,这个时候要使用腾讯的第三方加固(以前还是要自己写命令加固的,现在都做成软件了,直接下载加固你的APP就行),其他的就不用说了,按照要求写就行,写完了记得检查一遍哦,然后点击“提交审核”,大约需要1-2个工作日,耐心等待哈。通过审核了就可以得到我们需要的APP ID 和 APP KEY:如下图
![](http://upload-images.jianshu.io/upload_images/2120096-06e420ec53dc9261.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(2).新浪微博开放平台账号 http://open.weibo.com/
点击“微连接”选择“移动应用”,点击“立即接入”,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-775006930b349cf5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
点击“继续创建”,输入“应用名称”,选择“应用平台”,点击创建,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-fbc42b605e65e882.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
下面就是填写我们的应用信息了,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-0179c517518235f1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这里的“Android签名” 可以通过该平台的签名工具获取,是一个apk文件,下载了安装到你的手机上,同时你的手机也要安装要审核的APP,然后打开下载的获取签名文件的app,输入你的app的包名,就可以获取到签名信息了,是不是很方便呢,剩下的信息,只有一个需要我们去另外一个平台申请,其他的直接写就好了,看图说话:
![](http://upload-images.jianshu.io/upload_images/2120096-85d463b0f4a97412.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
就是这个“Android下载地址”,这个地址怎么写呢,写什么呢,而且还必须写,写错了审核还过补了,其实这个地址是我们的APP在其他平台已经上线并且可以搜索下载的地址,我这里使用的360开放平台 http://dev.360.cn/html/ad/index.html,这里要注意的是360开放平台上的账号信息要跟你其他平台上的一致,也就是都是属于同一个企业或者个人的,不然,哼哼,你的新浪微博审核是不会通过的呦,其实360就相当于是我们应用的一个下载平台,我们要先将应用在360上上线,然后回去到应用的推广地址,大致流程是下面这样子的:
![](http://upload-images.jianshu.io/upload_images/2120096-20c942d9f693a49a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
首先保证你的应用已将上线,然后点击你的应用,点击“推广下下载地址”如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-45496a929f36355a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
点击“立即使用”,看图:
![](http://upload-images.jianshu.io/upload_images/2120096-e4ef1d546f174f63.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
看到没,这个应用推广地址,就是我们在申请新浪微博的时候要填写的“Android下载地址”
好了,信息基本是填写完了,点击保存,然后提交审核,新浪微博的审核还挺快的,一个工作日,耐心等待。通过审核后,就可以获取到我们的需要的App Key和App Secret。
审核通过后,我们还有一个重要的地方要改,要不然是授权不成功的,来吧,看图:
![](http://upload-images.jianshu.io/upload_images/2120096-efd56876bf1caa32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
那,就是这个回调页,记得,必须写哦(可以写公司的官网)。
(3) 微信开放平台 https://open.weixin.qq.com/
微信的审核比较严格,而且还需要付费,一年好像是300块。
好了,开始我们的流程,登录我们注册的微信开放平台账号,点击“移动应用开发”,如下图
![](http://upload-images.jianshu.io/upload_images/2120096-406c293e7034135d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
点击“创建应用”
![](http://upload-images.jianshu.io/upload_images/2120096-67bf0051b8e64bca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
填写基本应用的信息,这个就不多说了,自己写,接下来是填写平台信息,输入“应用官网”并选择应用平台,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-ae308394fabdcf97.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这些信息也没什么难度,直接写就好了,点击“提交审核”,大概需要7个工作日,一般3.4天就可以审核完毕。
至此,我们在QQ、新浪微博、微信平台上的应用审核就抖已经完成了,接下来就是如何在项目中去使用了。
5.在share sdk官网创建应用的时候,我们就已经按照官方的文档,将我们需要jar包等集成到了我们的项目中,也在manifest文件中进行了配置,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-ab936a6dec48a0bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2120096-2ac1ce6198bffb07.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
然后在我们的asstes文件下找到ShareSdk.xml并打开,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-636e57261118f116.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(1)修改ShareSdk 的AppKey,改为你在ShareSdk官网创建的应用的AppKey,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-affacb64ab71650e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(2)修改各个平台的AppId和AppKey,如下图:
![](http://upload-images.jianshu.io/upload_images/2120096-ae911a547ec371a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2120096-7b9b8e10cd0be759.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2120096-efa7080ab100c75f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
好了,需要修改的我们都已经改好了,现在就可以在项目中使用啦。
6.先说第三方登录,话不多说,直接上代码,看图说话:
/**
*新浪第三方登录
*/
private voidsinaLogoin() {
ShareSDK.initSDK(this);
Platform sina = ShareSDK.getPlatform(SinaWeibo.NAME);
sina.SSOSetting(true);
authorize(sina);
}
/**
*微信第三方登录
*/
private voidweixinLogoin() {
ShareSDK.initSDK(this);
Platform wechat = ShareSDK.getPlatform(this,Wechat.NAME);
wechat.SSOSetting(true);
if(!wechat.isClientValid()) {
Toast.makeText(mContext,
"微信未安装,请先安装微信",
Toast.LENGTH_LONG).show();
}
authorize(wechat);
}
/**
* QQ第三方登录
*/
private voidqqLogin() {
ShareSDK.initSDK(this);
Platform qq = ShareSDK.getPlatform(QQ.NAME);
qq.SSOSetting(true);
authorize(qq);
}
/**
*第三方登录选择 要数据不要功能
*
*@paramplat
*/
private voidauthorize(Platform plat) {
if(plat ==null) {
return;
}
plat.setPlatformActionListener(this);
//关闭SSO授权
plat.SSOSetting(false);
plat.showUser(null);
}
回调的监听 我们要实现PlatformActionListener 这个接口,有三个回调方法,onComplete()、onError()、onCancel(),分别是授权成功、授权失败、取消授权,授权成功后,我们就可以获取到自己想要的数据了,如下图是我需要的数据:
![](http://upload-images.jianshu.io/upload_images/2120096-50ada91be9b32f47.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
另外两个方法,这里就不多少了,自己要做什么处理,直接写就好啦,登录的差不多就是这些,下面来看看分享的吧。
7.关于第三方分享,其实也不难,我们可以使用ShareSdk默认的分享界面,也可以自定义分享界面,我们先看看默认的分享是什么样子的,先看代码(官方代码):
privatevoidshowShare(){
ShareSDK.initSDK(this);
OnekeyShareoks=newOnekeyShare();
//关闭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);
}
编译并运行后,弹出类似下图的的分享列表选择页面,点击后弹出分享窗口,点击发表后就成功发送到社交平台的话说明你已经基本集成成功了。
![](http://upload-images.jianshu.io/upload_images/2120096-7b7b862cb7126f3f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
就是这么简单,哈哈。
下面再看看我们自定义的分享界面然后,这里我使用的是截屏分享:
首先我是自定义了一个dialog, 然后点击分享的时候去截屏,看看截屏的代码:
/**
*截图
*/
privateStringgetIcon() {
String imageName =null;
File iconDir =newFileStorage().getIconDir();
imageName = UUID.randomUUID().toString() +".png";
File imageFile =newFile(iconDir,imageName);
try{
bgView.setDrawingCacheEnabled(true);
bgView.buildDrawingCache();
Bitmap obtainBitmap =bgView.getDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(obtainBitmap,0,0,bgView.getWidth(),bgView.getHeight() -bottom_ll.getHeight());
bgView.destroyDrawingCache();
bgView.setDrawingCacheEnabled(false);
FileOutputStream out =null;
try{
out =newFileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG,100,out);
}catch(FileNotFoundException e) {
e.printStackTrace();
}finally{
StreamUtil.safeClose(out);//关闭流
}
if(bitmap !=null) {//内存优化
bitmap.recycle();
}
}catch(Exception e) {
}
return imageName;
}
注意:bgView 就是我们要截屏的View ,bottom_ll是我图片下面不需要的一些高度,这里可以自己改一下,删除了也是可以的,下面我们看看分享的代码:
(1)微博:
shareImagename= getIcon();
SinaWeibo.ShareParams sp1 =newSinaWeibo.ShareParams();
File iconDir1 =newFileStorage().getIconDir();
File file1 =newFile(iconDir1,shareImagename);
sp1.setImagePath(file1.getAbsolutePath());
Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);
weibo.SSOSetting(true);
weibo.setPlatformActionListener(platformActionListener);//设置分享事件回调
//执行图文分享
weibo.share(sp1);
(2)QQ:
shareImagename= getIcon();
QQ.ShareParams sp2 =newQQ.ShareParams();
sp2.setTitle(res.getString(R.string.app_name));
sp2.setTitleUrl(res.getString(R.string.share_title_url));//标题的超链接
sp2.setText(res.getString(R.string.share_Text));
File iconDir2 =newFileStorage().getIconDir();
File file2 =newFile(iconDir2,shareImagename);
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
sp2.setImagePath(file2.getAbsolutePath());
// sp.setImageUrl("http://www.someserver.com/测试图片网络地址.jpg");
sp2.setSite(getString(R.string.app_name));
sp2.setSiteUrl(res.getString(R.string.share_title_url));
Platform qzone = ShareSDK.getPlatform(QQ.NAME);
qzone.setPlatformActionListener(platformActionListener);//设置分享事件回调
//执行图文分享
qzone.share(sp2);
(3)微信:
shareImagename= getIcon();
Platform.ShareParams wechat =newPlatform.ShareParams();
wechat.setTitle(res.getString(R.string.app_name));
wechat.setText(res.getString(R.string.share_Text));
File iconDir =newFileStorage().getIconDir();
File file =newFile(iconDir,shareImagename);
wechat.setImagePath(file.getAbsolutePath());
wechat.setUrl(res.getString(R.string.share_title_url));
wechat.setShareType(Platform.SHARE_WEBPAGE);
Platform weixin = ShareSDK.getPlatform(mContext,
Wechat.NAME);
if(!weixin.isClientValid()) {//如果没有安装微信客户端,则提醒用户安装
Toast.makeText(mContext,
"微信未安装,请先安装微信",
Toast.LENGTH_LONG).show();
}
weixin.setPlatformActionListener(platformActionListener);
weixin.share(wechat);
(4)微信朋友圈
shareImagename= getIcon();
Platform.ShareParams wechatMoments =newPlatform.ShareParams();
wechatMoments.setTitle(res.getString(R.string.app_name));
wechatMoments.setText(res.getString(R.string.share_Text));
File iconDir4 =newFileStorage().getIconDir();
File file4 =newFile(iconDir4,shareImagename);
wechatMoments.setImagePath(file4.getAbsolutePath());
wechatMoments.setUrl(res.getString(R.string.share_title_url));
wechatMoments.setShareType(Platform.SHARE_WEBPAGE);
Platform weixinMoments = ShareSDK.getPlatform(mContext,
WechatMoments.NAME);
if(!weixinMoments.isClientValid()) {
Toast.makeText(mContext,
"微信未安装,请先安装微信",
Toast.LENGTH_LONG).show();
}
weixinMoments.setPlatformActionListener(platformActionListener);
weixinMoments.share(wechatMoments);
分享的监听:
privatePlatformActionListenerplatformActionListener=newPlatformActionListener() {
@Override
public voidonCancel(Platform arg0, intarg1) {
viewPager.setCurrentItem(viewPagerPosition);
}
@Override
public voidonComplete(Platform arg0, intarg1,
HashMap arg2) {
Toast.makeText(mContext,res.getString(R.string.share_success),Toast.LENGTH_LONG).show();
}
@Override
public voidonError(Platform arg0, intarg1,Throwable arg2) {
Toast.makeText(mContext,res.getString(R.string.share_fail),Toast.LENGTH_LONG).show();
}
};
SharedSDk相关的集成。第三方登陆及分享相关推荐
- 熟练集成第三方登录、分享、地图、推送、支付等技术
第三方分享:我使用的是友盟第三方分享,首先注册友盟开放平台账号,创建应用,生成对应的Appkey,然后在项目导入友盟提供的Jar包 在QQ开放平台申请账号,之后认证,完成之后创建应用,然后绑定包名和签 ...
- Android开发之集成Twitter登陆以及分享,文后有源码。
目录 1.APP build 2.sdk初始化 3.按钮样式(布局文件) 3.1官方按钮登陆 3.2自定义按钮登陆 4.Twitter分享 5.源码传送:点我点我点我 1.APP build //推特 ...
- 友推集成第三方登录和分享的步骤
1.进入友推官网http://youtui.mobi/user/reg注册并申请应用key 2.申请微信平台appkey:https://open.weixin.qq.com/ 3.引入友推项目库(下 ...
- Android使用ShareSDK集成第三方登录和分享(v3.1.2)
一.产品概述 ShareSDK是一种社会化分享组件,为iOS.Android.WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台. 二.集成方 ...
- 3分钟,实现友盟第三方分享与登陆-- -一键分享
博客是作者近期实现第三方登陆.分享时的记录,采用的第三方平台是友盟社会化组件. 希望可以通过这个博客让读者快速集成好.并且实现第三方登陆.分享功能. (基本上Demo实现的功能) 众所周知,实 ...
- android qq三方登录授权失败,QQ第三方登陆授权失败110401原因及解决办法分享
qq第三方登陆授权失败出现代码110401是什么情况?遇到这种情况该如何解决?相信很多用户们在操作的时候都出现过类似的情况吧?下面是小编带来的攻略解析,一起来关注下! qq第三方登陆授权失败11040 ...
- flutter 简单集成第三方腾讯QQ分享/登录
flutter 集成腾讯QQ分享登录 原创:@As.Kai 博客地址:https://blog.csdn.net/qq_42362997 如果以下内容对您有帮助,点赞点赞点赞~ 项目内容: 当前环境监 ...
- native react 集成微信登录_react-native——微信登陆、分享、支付
-------android篇java 推荐使用react-native-wechat库,githup地址:github.com/yorkie/reac- 登陆,分享,收藏(v1.9.9+) 和支付的 ...
- 第三方登陆:微信官方登陆
第三方登陆:微信官方登陆 一.首先进入微信授权登陆之前的一个验证,在微信开放平台注册开发者账号,并拥有一个已经审核通过的移动应用,获得相应的AppID和AppSecrect,申请微信通过审核后(如下如 ...
最新文章
- WMI技术介绍和应用——Event Provider
- block才会执行 mono_C-BLOCK录制《我要上春晚》,目测会上湖南分会场
- Oracle exp/imp导出导入工具的使用
- vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分
- Python3报错:TypeError: unsupported operand type(s) for +: ‘int‘ and ‘str‘
- IE-OLD IE 提示
- 数据库设计笔记——概述(一)
- 自定义常用input表单元素二:纯css实现自定义radio单选按钮
- 这份NLP研究进展汇总请收好,GitHub连续3天最火的都是它
- 【绝对干货】TEASER前传之QUASAR:基于四元数的存在外点Wahba问题的可证明最优解
- java8 list map 分组_java8 List转Map,并进行分组过滤求和等操作
- IOS发布应用照片大小
- iptables详解 1 -- iptables概念
- 解决PCL 编译报错:undefined reference to `pcl::PCLBase<pcl::PointXYZRGBA>:: XXX
- 【算法】冒泡排序图文讲解
- Python利用 Django开发网站
- python中try怎么用_python中的try的用法,try 的用法?,英文try的用法
- 2021第十二届蓝桥杯大赛软件赛省赛C++ B组真题题解
- win10 如何修改 C:\Users\用户名文件夹
- 《邪不压正》好不好看?大数据分析告诉你
热门文章
- python文本字符分析编写程序接收字符串_Python程序接受包含所有元音的字符串
- 系统中mysql设计过程_某系统 数据库设计过程记录
- wwhhuu (思维
- wxwidgets mysql_关于wxWidgets控件出现乱码
- 称通过帮买服务买到泡水车 购车者诉“瓜子网”索赔
- 神经网络模型符号解释!!!蛮重要的,记不住的可以参考下。
- 银行面试十问——常见问题面试分析!
- nodejs+vue国产动漫网站论坛数据智能分析系统python django
- conda添加镜像源
- nn.Conv2d()中dilation参数的作用