300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 使用友盟SDK实现新浪微博登录

使用友盟SDK实现新浪微博登录

时间:2018-10-23 05:44:47

相关推荐

使用友盟SDK实现新浪微博登录

项目需求实现新浪微博登录,并实现文章对第三方平台的分享,使用友盟SDK实现以上功能,在实现的过程中,踩了一些坑,记录下来和大家分享一下。

友盟提供了SSO(免登录)以及非SSO的方式。所谓SSO的方式,即当在本地安装了新浪微博客户端并已登录,则在本应用中无需再次输入用户名和密码实现登录。

【非SSO方式的实现】

无需做友盟后台的相关配置,走的是web页面的登录方式。

1,声明如下成员变量

private UMSocialService mController;

2,在当前Activity的onCreate方法中初始化

mController = UMServiceFactory.getUMSocialService(“com.umeng.login”);

3,新浪微博登录按钮的监听事件

mSinaWeiboLoginButton = findViewById(R.id.sina_weibo_login);

mSinaWeiboLoginButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mController.doOauthVerify(LoginActivity.this, SHARE_MEDIA.SINA,

new UMAuthListener() {

@Override

public void onError(SocializeException e,

SHARE_MEDIA platform) {

}@Overridepublic void onComplete(Bundle value,SHARE_MEDIA platform) {if (value != null) {getUserInfo(value.getString("uid"));} }@Overridepublic void onCancel(SHARE_MEDIA platform) {}@Overridepublic void onStart(SHARE_MEDIA platform) {}});}});

doOauthVerify接口将调出新浪微博授权页面进行授权操作,用自己的新浪微博账号登录debug一下,在onComplete的回调方法里,返回的Bundle类型的value值如下:

access_key=2.00PNzcRC03t9ZI940ca19fc0fXYs5D

expires_in=628598

access_secret=2.00PNzcRC03t9ZI940ca19fc0fXYs5D

uid=2092755145

4,getUserInfo方法来获取用户的资料,通过调用getPlatformInfo来获取。

private void getUserInfo(String uid) {

mController.getPlatformInfo(LoginActivity.this, SHARE_MEDIA.SINA,

new SocializeListeners.UMDataListener() {

@Override

public void onStart() {

}

@Overridepublic void onComplete(int status, Map<String, Object> info) {if (status == 200 && info != null) {uuid = info.get("uid") + "";sina_tonken = info.get("access_token") + "";screen_name = info.get("screen_name") + "";WeiboAuthorization authorization = new WeiboAuthorization();authorization.setAccessToken(sina_tonken);authorization.setUserId(uuid);if(!Util.getSharePersistent(LoginActivity.this, "EXPIRES_IN").equals("")){authorization.setExpiresIn(Integer.parseInt(Util.getSharePersistent(LoginActivity.this, "EXPIRES_IN")));}authorization.setRefreshToken(Util.getSharePersistent(LoginActivity.this, "REFRESH_TOKEN"));authorization.setSource("sina");new LoginAsyncTask().execute(authorization);} else {Toast.makeText(LoginActivity.this, "账号异常", Toast.LENGTH_SHORT).show();}}});

}

调用getPlatformInfo接口,在onComplete方法中将用户资料以Map的结构返回,debug一下获取到的用户信息如下图所示,包括了用户名、头像、access_token等新浪微博的用户信息。

5,拿到这些数据之后,剩下的工作就是与本应用的服务端的交互工作,访问应用的登录接口了。

非SSO登录走的是网页的登录方式,且每次登录都需要输入用户名和密码,效果如下图所示:

【SSO方式】

1,通过友盟SDK实现免登,首先需要在新浪微博后台以及友盟后台做一些配置:

在新浪微博后台配置 安全域名以及授权回调页

将安全域名填写为 ,注意填写之后需要二次审核(审核时间1个工作日),审核通过之后生效。

以上是新浪微博的默认授权回调页,如果不使用这个默认的授权回调页,则需要在代码中进行设置:

在友盟后台配置App Key 以及 App Secret【注意:在新浪微博后台安全域名以及授权回调页审核没有通过之前,不要配置友盟的后台信息,否则影响非SSO方式的线上用户!

【SSO方式的代码实现】

【一些坑】

1,从非SSO方式改为SSO方式,一定要等新浪微博后台审核通过之后,再在Umeng后台配置App key以及App Secret,否则会影响线上用户,报:redirect_uri_mismatch 错误。

2,SSO方式必须是签名包,否则会报签名错误。

3,授权回调页如果不是新浪默认的授权回调页,则必须在代码中进行配置。

【参考】

/social/android/login-page#2_4

/thread-5394-1-1.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。