友盟社会化Android组件之第三方登录

前段时间公司需要,逐步了新浪微博、腾讯qq、微信等授权登录验证的问题。如果要一个个申请,看文档写代码也是很多流程的。干脆用友盟社会化Android组件之第三方登录。友盟是集成了这些平台,还有其他主流的平台的。我在这里主要讲一下友盟里面微博登录。先看看友盟是怎么介绍自已的。

一、友盟社会化分享介绍

友盟社会化分享组件,帮助移动应用快速具备微信分享,微博分享、登录、评论、喜欢等社会化组件功能,助力产品推广,并提供实时、全面的社会化数据统计分析服务,是国内最大的社会化分享SDK。

支持各大社交平台

精选国内外23个主流社交平台,支持图片、文字、图文、音乐、视频等多种内容的分享。

国内平台:微信、朋友圈、QQ、Qzone、新浪微博、腾讯微博、人人、豆瓣、有道云笔记、来往、易信、短信、邮件

国外平台:Facebook、Twitter、Instagram、Google+、Line、Whatsapp、Tumblr、Pinterest、Evernote、Pocket、LIinkedIn、Flickr、Kakao Talk。

从这上面可以看出,支持平台太多啦,自已有选择开发就行。搞几个申请、注册、身份认证、应用审核。。。你都会抓狂的。。

二、友盟开发1、注册友盟的开放平台的网址: 友盟的注册很简单,有个邮箱就能注册,注册完不用身份认证那么麻烦。不用审核等。2、友盟官方第三方文档支持:

三、友盟平台里面新浪微博操作1、注册新浪微博开放的网址:

这个开放平台的注册,一定要有开通微博账号的账户。用个人或者企业级的。 开通之后,先进行邮箱验证:选择个人或者企业。需要一系列的资料。 身份验证:个人和企业认证有区别。也是一系列的资料。

搞定这些了,创建移动应用了。需要的资料很多,我在这里列出几个重点的: 应用的包名: 应用的签名: android应用的下载地址:(一定是应用商店上线后的地址:例如,百度、91、安卓等,我是有百度开发者平台上线应用的) 应用介绍: 应用图标:三个(分别是16*16、80*80、120*120 单位px) 应用介绍图片:三张以上(300*450 单位px)

ps:有这些资料就差不多了,图片尺寸以及应用下载地址严格按照要求。个人开发一般人还真弄不了那么多。 提交需要审核,最好在应用展示图片中有用到分享到微博的例子,容易通过。审核时间一天以内。

2、App Key以及App Secret配置到友盟平台

这上面搞定了之后,把上面申请到的App Key以及App Secret配置到友盟平台。如下图: 新浪微博的配置不用在代码中配置,只需要在友盟的后台。微信,qq需要在代码中配置。

3、新浪微博第三方登录代码的流程

这个流程在友盟文档中也有很详细,我就不写友盟那里文档的东西了。写了就有重复。就看看我的代码吧。不过我代码中还有qq,微信都在了。将就着看,感觉都还好理解。我只贴授权登录的了,分享、评论那些我删了。

<span style="font-size:18px;">package com.southgnss.umeng;import java.io.File;import java.util.Date;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.graphics.BitmapFactory;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;import com.southgnss.umeng.commons.Constants;import com.umeng.analytics.MobclickAgent;import com.umeng.socialize.bean.SHARE_MEDIA;import com.umeng.socialize.bean.SocializeEntity;import com.umeng.socialize.bean.StatusCode;import com.umeng.socialize.controller.UMServiceFactory;import com.umeng.socialize.controller.UMSocialService;import com.umeng.socialize.controller.listener.SocializeListeners.SocializeClientListener;import com.umeng.socialize.controller.listener.SocializeListeners.UMAuthListener;import com.umeng.socialize.controller.listener.SocializeListeners.UMDataListener;import com.umeng.socialize.exception.SocializeException;import com.umeng.socialize.sso.QZoneSsoHandler;import com.umeng.socialize.sso.SinaSsoHandler;import com.umeng.socialize.sso.UMQQSsoHandler;import com.umeng.socialize.sso.UMSsoHandler;import com.umeng.socialize.utils.Log;import com.umeng.socialize.weixin.controller.UMWXHandler;/** * @description 实现友盟第三方登录注销、获取用户信息 */public class LoginActivity extends Activity implements OnClickListener {// 整个平台的Controller,负责管理整个SDK的配置、操作等处理private UMSocialService mController = UMServiceFactory.getUMSocialService(Constants.DESCRIPTOR);private Button sinaLoginButton;private Button sinaLogoutButton;private Button qqLoginButton;private Button qqLogoutButton;private Button wechatLoginButton;private Button wechatLogoutButton;private Button shareButton;@SuppressWarnings("deprecation")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sinaLoginButton = (Button) this.findViewById(R.id.btn_sina_login);sinaLogoutButton = (Button) this.findViewById(R.id.btn_sina_logout);qqLoginButton = (Button) this.findViewById(R.id.btn_qq_login);qqLogoutButton = (Button) this.findViewById(R.id.btn_qq_logout);shareButton = (Button) this.findViewById(R.id.btn_share);wechatLoginButton = (Button) this.findViewById(R.id.btn_wechat_login);wechatLogoutButton = (Button) this.findViewById(R.id.btn_wechat_logout);sinaLoginButton.setOnClickListener(this);sinaLogoutButton.setOnClickListener(this);qqLoginButton.setOnClickListener(this);qqLogoutButton.setOnClickListener(this);shareButton.setOnClickListener(this);wechatLoginButton.setOnClickListener(this);wechatLogoutButton.setOnClickListener(this);// 配置需要分享的相关平台configPlatforms();MobclickAgent.updateOnlineConfig(this);}@Overrideprotected void onResume() {super.onResume();MobclickAgent.onResume(this);}@Overrideprotected void onPause() {super.onPause();MobclickAgent.onPause(this);}/** * 配置分享平台参数 */private void configPlatforms() {// 添加新浪sso授权mController.getConfig().setSsoHandler(new SinaSsoHandler());// 添加QQ、QZone平台addQQQZonePlatform();// 添加微信、微信朋友圈平台addWXPlatform();}/** * 添加所有的平台</br> */private void addCustomPlatforms() {// 添加微信平台addWXPlatform();// 添加QQ平台addQQQZonePlatform();mController.getConfig().setPlatforms(SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT);mController.openShare(LoginActivity.this, false);}/** * @功能描述 : 添加微信平台分享 * @return */private void addWXPlatform() {// 注意:在微信授权的时候,必须传递appSecret// wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppIDString appId = "wxc8f10d692edf9f5f";String appSecret = "d4624c36b6795d1d99dcf0547af5443d";// 添加微信平台UMWXHandler wxHandler = new UMWXHandler(LoginActivity.this, appId,appSecret);wxHandler.addToSocialSDK();// 支持微信朋友圈//UMWXHandler wxCircleHandler = new UMWXHandler(LoginActivity.this,//appId, appSecret);//wxCircleHandler.setToCircle(true);//wxCircleHandler.addToSocialSDK();}/** * @功能描述 : 添加QQ平台支持 QQ分享的内容, 包含四种类型, 即单纯的文字、图片、音乐、视频. 参数说明 : title, summary, *image url中必须至少设置一个, targetUrl必须设置,网页地址必须以""开头 . title : *要分享标题 summary : 要分享的文字概述 image url : 图片地址 [以上三个参数至少填写一个] targetUrl *: 用户点击该分享时跳转到的目标地址 [必填] ( 若不填写则默认设置为友盟主页 ) * @return */private void addQQQZonePlatform() {String appId = "100424468";String appKey = "c7394704798a158208a74ab60104f0ba";// 添加QQ支持, 并且设置QQ分享内容的target urlUMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(LoginActivity.this,appId, appKey);//qqSsoHandler.setTargetUrl("");//qqSsoHandler.addToSocialSDK();// 添加QZone平台QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(LoginActivity.this, appId, appKey);//qZoneSsoHandler.addToSocialSDK();}@Overridepublic void onClick(View v) {int nid = v.getId();if (nid == R.id.btn_sina_login) {login(SHARE_MEDIA.SINA);return;}else if (nid == R.id.btn_qq_login) {login(SHARE_MEDIA.QQ);return;}else if (nid == R.id.btn_wechat_login) {login(SHARE_MEDIA.WEIXIN);return;}else if (nid == R.id.btn_sina_logout) {logout(SHARE_MEDIA.SINA);return;}else if (nid == R.id.btn_qq_logout) {logout(SHARE_MEDIA.QQ);return;}else if (nid == R.id.btn_wechat_logout) {logout(SHARE_MEDIA.WEIXIN);return;}}/** * 授权。如果授权成功,则获取用户信息 * * @param platform */private void login(final SHARE_MEDIA platform) {mController.doOauthVerify(LoginActivity.this, platform,new UMAuthListener() {@Overridepublic void onStart(SHARE_MEDIA platform) {Toast.makeText(LoginActivity.this, "授权开始",Toast.LENGTH_SHORT).show();}@Overridepublic void onError(SocializeException e,SHARE_MEDIA platform) {Toast.makeText(LoginActivity.this, "授权失败",Toast.LENGTH_SHORT).show();}@Overridepublic void onComplete(Bundle value, SHARE_MEDIA platform) {Toast.makeText(LoginActivity.this, "授权完成",Toast.LENGTH_LONG).show();// 获取uidString uid = value.getString("uid");if (!TextUtils.isEmpty(uid)) {// uid不为空,获取用户信息getUserInfo(platform);} else {Toast.makeText(LoginActivity.this, "授权失败…",Toast.LENGTH_LONG).show();}}@Overridepublic void onCancel(SHARE_MEDIA platform) {Toast.makeText(LoginActivity.this, "授权取消",Toast.LENGTH_SHORT).show();}});}/** * 获取用户信息 * * @param platform */private void getUserInfo(SHARE_MEDIA platform) {mController.getPlatformInfo(LoginActivity.this, platform,new UMDataListener() {@Overridepublic void onStart() {}@Overridepublic void onComplete(int status, Map<String, Object> info) {//String showText = "";//if (status == StatusCode.ST_CODE_SUCCESSED) {//showText = "用户名:" +//info.get("screen_name").toString();//Log.d("#########", "##########" + info.toString());//} else {//showText = "获取用户信息失败";//}if (info != null) {Toast.makeText(LoginActivity.this, info.toString(),Toast.LENGTH_SHORT).show();}}});}/** * 注销本次登陆 * @param platform */private void logout(final SHARE_MEDIA platform) {mController.deleteOauth(LoginActivity.this, platform, new SocializeClientListener() {@Overridepublic void onStart() {}@Overridepublic void onComplete(int status, SocializeEntity entity) {String showText = "解除" + platform.toString() + "平台授权成功";if (status != StatusCode.ST_CODE_SUCCESSED) {showText = "解除" + platform.toString() + "平台授权失败[" + status + "]";}Toast.makeText(LoginActivity.this, showText, Toast.LENGTH_SHORT).show();}});}// 如果有使用任一平台的SSO授权, 则必须在对应的activity中实现onActivityResult方法, 并添加如下代码@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);// 根据requestCode获取对应的SsoHandler,返回一定是requestCodeUMSsoHandler ssoHandler = mController.getConfig().getSsoHandler(requestCode);if (ssoHandler != null) {ssoHandler.authorizeCallBack(requestCode, resultCode, data);}}}</span>这上面代码我在测试时候,微博是成功的。然后qq那个密钥不行,我注释掉了配置到平台的代码。微信那个审核最严格,没有App Key以及App Secret是行不通。我的那个还在微信那边审核,开通那个开发者身份资质认证需要300元的。一堆资料填写审核。。。

实现效果如下:

这张是微博授权界面

坐在外婆的沙滩,看最白的帆影。

友盟社会化Android组件之第三方登录

相关文章:

你感兴趣的文章:

标签云: