ps:此篇文章属于转载,附原作者地址:http://www.jianshu.com/p/db4136d70226

最近很多项目中都是用到了第三方的登录和分享,虽然说可以按照官方文档去一步步实现,但总还是会遇到一些坑,下面我就说说我在项目中是怎么使用第三方的登录跟分享的(我这里使用的share sdk)。


1.注册账号:首先,我们需要在share sdk官网(http://www.mob.com)注册一个账号,然后登录,进入主界面,首先就是创建我们的应用了,在右上角点击“进入后台”,如下图:

然后点击我们要使用的ShareSdk,如下图:

2.添加应用:鼠标移动到“应用”菜单,选择添加应用,如下图:

3.输入应用名称,并选择Android,点击添加,如下图:

添加成功后会跳转我们创建的应用界面,并且可以看到我们分享所需要的App Key 和App Secret,创建好了应用,下一步就是在APP中的使用了,首先看一下官方文档,点击官方文档,找到我们需要的“安卓集成文档”,就到了如下界面:

按照右侧官方文档的流程,先配置一下我们的APP,主要是一下几个步骤:

(1)获取ShareSDK的AppKey ,这个在我们创建好应用了之后就已经有了

(2)下载sdk

(3)快速集成

(2)、(3)官网文档已经说的很清楚了,我这里就不再说明啦。

上面说了那么多,我们用的还是sharesdk的测试账号进行分享,下面就说说如何在我们的项目中用自己的账号进行分享和登录(在这之前首先要保证在上面的测试中,分享是没有问题的,没有出现崩溃什么的,再进行我们的下一步)

4:一般我们的项目中集成的有QQ、微信、新浪,下面我们就说说在一个项目中如何使用这三种平台进行分享和登录,第一次用的时候也是走了不少坑,希望我的文章能帮助你少走一些坑,首先我们的项目一般很少是个人的,大部分都是公司项目,所以要在这三种平台进行分享,首先要分别在这三个平台注册一个企业账号(注意:填写企业信息的时候三个平台要保持一致,不要问我为啥,为了少点坑,哈哈,如果三个平台的企业信息不一致,后面的审核APP会有很多问题,到时候又要回去改,真的是很麻烦),如果是个人,那你注册个人账号就可以了,下面我就用使用企业账号来举例,

(1).腾讯开放平台 http://wiki.open.qq.com

上面说了,我们要先注册账号,并填写信息,并通过审核,才有使用QQ进行第三方操作的资质呀,资质有了,先来就是该创建我们的应用了,

看图说话,如下:

点击“创建应用”

选择“移动应用 安卓” ,点击“创建应用”,继续看图:

选择“安卓应用类型”,根据自己的APP类型,自己选择,点击“确定”,看图:

下面就是“完善信息”了,这里我也不用怎么说,该怎么写就怎么写,带*的必须写哦,需要注意的就是我们上传的安装包,可能不符合腾讯审核的规则,这个时候要使用腾讯的第三方加固(以前还是要自己写命令加固的,现在都做成软件了,直接下载加固你的APP就行),其他的就不用说了,按照要求写就行,写完了记得检查一遍哦,然后点击“提交审核”,大约需要1-2个工作日,耐心等待哈。通过审核了就可以得到我们需要的APP ID 和 APP KEY:如下图

(2).新浪微博开放平台账号 http://open.weibo.com/

点击“微连接”选择“移动应用”,点击“立即接入”,如下图:

点击“继续创建”,输入“应用名称”,选择“应用平台”,点击创建,如下图:

下面就是填写我们的应用信息了,如下图:

这里的“Android签名” 可以通过该平台的签名工具获取,是一个apk文件,下载了安装到你的手机上,同时你的手机也要安装要审核的APP,然后打开下载的获取签名文件的app,输入你的app的包名,就可以获取到签名信息了,是不是很方便呢,剩下的信息,只有一个需要我们去另外一个平台申请,其他的直接写就好了,看图说话:

就是这个“Android下载地址”,这个地址怎么写呢,写什么呢,而且还必须写,写错了审核还过补了,其实这个地址是我们的APP在其他平台已经上线并且可以搜索下载的地址,我这里使用的360开放平台 http://dev.360.cn/html/ad/index.html,这里要注意的是360开放平台上的账号信息要跟你其他平台上的一致,也就是都是属于同一个企业或者个人的,不然,哼哼,你的新浪微博审核是不会通过的呦,其实360就相当于是我们应用的一个下载平台,我们要先将应用在360上上线,然后回去到应用的推广地址,大致流程是下面这样子的:

首先保证你的应用已将上线,然后点击你的应用,点击“推广下下载地址”如下图:

点击“立即使用”,看图:

看到没,这个应用推广地址,就是我们在申请新浪微博的时候要填写的“Android下载地址”

好了,信息基本是填写完了,点击保存,然后提交审核,新浪微博的审核还挺快的,一个工作日,耐心等待。通过审核后,就可以获取到我们的需要的App Key和App Secret。

审核通过后,我们还有一个重要的地方要改,要不然是授权不成功的,来吧,看图:

那,就是这个回调页,记得,必须写哦(可以写公司的官网)。

(3) 微信开放平台 https://open.weixin.qq.com/

微信的审核比较严格,而且还需要付费,一年好像是300块。

好了,开始我们的流程,登录我们注册的微信开放平台账号,点击“移动应用开发”,如下图

点击“创建应用”

填写基本应用的信息,这个就不多说了,自己写,接下来是填写平台信息,输入“应用官网”并选择应用平台,如下图:

这些信息也没什么难度,直接写就好了,点击“提交审核”,大概需要7个工作日,一般3.4天就可以审核完毕。

至此,我们在QQ、新浪微博、微信平台上的应用审核就抖已经完成了,接下来就是如何在项目中去使用了。

5.在share sdk官网创建应用的时候,我们就已经按照官方的文档,将我们需要jar包等集成到了我们的项目中,也在manifest文件中进行了配置,如下图:

需要的权限

注册activity

然后在我们的asstes文件下找到ShareSdk.xml并打开,如下图:

(1)修改ShareSdk 的AppKey,改为你在ShareSdk官网创建的应用的AppKey,如下图:

(2)修改各个平台的AppId和AppKey,如下图:

QQ

新浪微博

微信

好了,需要修改的我们都已经改好了,现在就可以在项目中使用啦。

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(),分别是授权成功、授权失败、取消授权,授权成功后,我们就可以获取到自己想要的数据了,如下图是我需要的数据:

获取到的个人平台信息

另外两个方法,这里就不多少了,自己要做什么处理,直接写就好啦,登录的差不多就是这些,下面来看看分享的吧。

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);

}

编译并运行后,弹出类似下图的的分享列表选择页面,点击后弹出分享窗口,点击发表后就成功发送到社交平台的话说明你已经基本集成成功了。

就是这么简单,哈哈。

下面再看看我们自定义的分享界面然后,这里我使用的是截屏分享:

首先我是自定义了一个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相关的集成。第三方登陆及分享相关推荐

  1. 熟练集成第三方登录、分享、地图、推送、支付等技术

    第三方分享:我使用的是友盟第三方分享,首先注册友盟开放平台账号,创建应用,生成对应的Appkey,然后在项目导入友盟提供的Jar包 在QQ开放平台申请账号,之后认证,完成之后创建应用,然后绑定包名和签 ...

  2. Android开发之集成Twitter登陆以及分享,文后有源码。

    目录 1.APP build 2.sdk初始化 3.按钮样式(布局文件) 3.1官方按钮登陆 3.2自定义按钮登陆 4.Twitter分享 5.源码传送:点我点我点我 1.APP build //推特 ...

  3. 友推集成第三方登录和分享的步骤

    1.进入友推官网http://youtui.mobi/user/reg注册并申请应用key 2.申请微信平台appkey:https://open.weixin.qq.com/ 3.引入友推项目库(下 ...

  4. Android使用ShareSDK集成第三方登录和分享(v3.1.2)

    一.产品概述 ShareSDK是一种社会化分享组件,为iOS.Android.WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台. 二.集成方 ...

  5. 3分钟,实现友盟第三方分享与登陆-- -一键分享

    博客是作者近期实现第三方登陆.分享时的记录,采用的第三方平台是友盟社会化组件. 希望可以通过这个博客让读者快速集成好.并且实现第三方登陆.分享功能.     (基本上Demo实现的功能) 众所周知,实 ...

  6. android qq三方登录授权失败,QQ第三方登陆授权失败110401原因及解决办法分享

    qq第三方登陆授权失败出现代码110401是什么情况?遇到这种情况该如何解决?相信很多用户们在操作的时候都出现过类似的情况吧?下面是小编带来的攻略解析,一起来关注下! qq第三方登陆授权失败11040 ...

  7. flutter 简单集成第三方腾讯QQ分享/登录

    flutter 集成腾讯QQ分享登录 原创:@As.Kai 博客地址:https://blog.csdn.net/qq_42362997 如果以下内容对您有帮助,点赞点赞点赞~ 项目内容: 当前环境监 ...

  8. native react 集成微信登录_react-native——微信登陆、分享、支付

    -------android篇java 推荐使用react-native-wechat库,githup地址:github.com/yorkie/reac- 登陆,分享,收藏(v1.9.9+) 和支付的 ...

  9. 第三方登陆:微信官方登陆

    第三方登陆:微信官方登陆 一.首先进入微信授权登陆之前的一个验证,在微信开放平台注册开发者账号,并拥有一个已经审核通过的移动应用,获得相应的AppID和AppSecrect,申请微信通过审核后(如下如 ...

最新文章

  1. WMI技术介绍和应用——Event Provider
  2. block才会执行 mono_C-BLOCK录制《我要上春晚》,目测会上湖南分会场
  3. Oracle exp/imp导出导入工具的使用
  4. vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分
  5. Python3报错:TypeError: unsupported operand type(s) for +: ‘int‘ and ‘str‘
  6. IE-OLD IE 提示
  7. 数据库设计笔记——概述(一)
  8. 自定义常用input表单元素二:纯css实现自定义radio单选按钮
  9. 这份NLP研究进展汇总请收好,GitHub连续3天最火的都是它
  10. 【绝对干货】TEASER前传之QUASAR:基于四元数的存在外点Wahba问题的可证明最优解
  11. java8 list map 分组_java8 List转Map,并进行分组过滤求和等操作
  12. IOS发布应用照片大小
  13. iptables详解 1 -- iptables概念
  14. 解决PCL 编译报错:undefined reference to `pcl::PCLBase<pcl::PointXYZRGBA>:: XXX
  15. 【算法】冒泡排序图文讲解
  16. Python利用 Django开发网站
  17. python中try怎么用_python中的try的用法,try 的用法?,英文try的用法
  18. 2021第十二届蓝桥杯大赛软件赛省赛C++ B组真题题解
  19. win10 如何修改 C:\Users\用户名文件夹
  20. 《邪不压正》好不好看?大数据分析告诉你

热门文章

  1. python文本字符分析编写程序接收字符串_Python程序接受包含所有元音的字符串
  2. 系统中mysql设计过程_某系统 数据库设计过程记录
  3. wwhhuu (思维
  4. wxwidgets mysql_关于wxWidgets控件出现乱码
  5. 称通过帮买服务买到泡水车 购车者诉“瓜子网”索赔
  6. 神经网络模型符号解释!!!蛮重要的,记不住的可以参考下。
  7. 银行面试十问——常见问题面试分析!
  8. nodejs+vue国产动漫网站论坛数据智能分析系统python django
  9. conda添加镜像源
  10. nn.Conv2d()中dilation参数的作用