第三方功能的实现常用控件android

安卓进阶第二篇之使用ShareSdk进行第三方登录和分享(过程比

2016-08-22  本文已影响6936人  起个牛逼的昵称

     以前老是看到别人说要多整理,以前我不以为然,觉得我会用就行了,干嘛还要整理,继前两天有时间整理了第一篇之后,才感觉到“好记性不如烂笔头”的重要性,万事开头难,刚开始写也有点茫然,总想着要怎么组织语言,怎么写的幽默又能让别人看懂,不过对于刚开始写简书的我来说还是有点困难,来吧,慢慢进步,先行动起来。

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

}

};

好了,大功告成,至于分享,到此也就结束啦。

写了这么多,虽然感觉写的不是很好,但自己还是很满意,毕竟是自己一字一字的写出来的,也是自己慢慢整理的,算是自己的东西了吧,第三方的东西用起来是不错,但有时候也是会碰到一些坑,这个时候不要慌,一定不要慌,还有客服呢,不要怕,哈哈,多和平台的客服交流一下,他们会给你想要的结果,好了,使用ShareSdk进行第三方分享跟登录就到这里啦,欢迎大家进行补充纠正。O(∩_∩)O哈哈~

上一篇下一篇

猜你喜欢

热点阅读