友盟+搜索

{{errorMsg}}

第三方登录

第三方登录包含两种情况

  • 获取用户资料,开发者调用获取用户资料接口,可以获取该三方平台返回的所有资料(包括姓名,性别,头像等)

  • 三方授权,开发者调用授权接口,可以获取accesstoken相关的信息,但是没有用户资料(姓名,性别,头像等),需要用户根据token自己去请求用户资料,对于保密性要求较高的用户可以使用

目前支持第三方登录的平台包括:

  • 国内平台(微信、新浪微博、QQ、豆瓣、人人)

  • 国外平台(Facebook、Twitter、linkedIn、kakao、VKontakte、Dropbox)

获取用户信息

获取用户资料之前需要工程配置,请参考配置文档 授权中只是能拿到uid,openid,token这些授权信息,想获取用户名和用户资料,需要使用这个接口

mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);

其中umAuthListener为授权回调,构建如下,其中授权成功会回调onComplete,取消授权回调onCancel,授权错误回调onError,对应的错误信息可以用过onError的Throwable参数来打印

private UMAuthListener umAuthListener = new UMAuthListener() {
 @Override
    public void onStart(SHARE_MEDIA platform) {
       //授权开始的回调
    }
    @Override
    public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
        Toast.makeText(getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onError(SHARE_MEDIA platform, int action, Throwable t) {
        Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCancel(SHARE_MEDIA platform, int action) {
        Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();
    }
};

onActivityResult实现方法如下:

@Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);

    }

登录成功后,第三方平台会将用户资料传回, 全部会在Map data中返回 ,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,我们将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换,这里列出我们封装的字段及含义

UShare封装后字段名 QQ原始字段名 微信原始字段名 新浪原始字段名 字段含义 备注
uid openid unionid id 用户唯一标识 uid能否实现Android与iOS平台打通,目前QQ只能实现同APPID下用户ID匹配
name screen_name screen_name screen_name 用户昵称
gender gender gender gender 用户性别 该字段会直接返回男女
iconurl profile_image_url profile_image_url profile_image_url 用户头像

用户资料基本信息解析如下

在返回的map中各个信息对应的key值如下

新浪微博:

用户id:uid

accesstoken: accessToken (6.2以前用access_token)

refreshtoken: (6.2以前用refresh_token)

过期时间:expiration (6.2以前用expires_in)

用户名:name(6.2以前用screen_name)

位置:location

头像:iconurl(6.2以前用profile_image_url)

性别:gender

关注数:followers_count

好友数:friends_count

qq:

name:name(6.2以前用screen_name)

用户id:uid

accesstoken: accessToken (6.2以前用access_token)

过期时间:expiration (6.2以前用expires_in)

性别:gender

头像:iconurl(6.2以前用profile_image_url)

是否黄钻:is_yellow_year_vip

黄钻等级:yellow_vip_level

城市:city

省份:province

QQ目前uid暂时无法实现多个应用间打通操作,但QQ预留了unionID字段,后续会实现此功能

微信:

微信返回的openID和unionID都可以实现用户标识的需求,二者的区别在于,unionID可以实现同一个开发者账号下的应用之间账号打通的需求

openid:openid

unionid:(6.2以前用unionid)用户id

accesstoken: accessToken (6.2以前用access_token)

refreshtoken: refreshtoken: (6.2以前用refresh_token)

过期时间:expiration (6.2以前用expires_in)

name:name(6.2以前用screen_name)

城市:city

省份:prvinice

国家:country

性别:gender

头像:iconurl(6.2以前用profile_image_url)

facebook:

用户id:uid(6.2以前用id)

first_name:first_name

last_name:last_name

middle_name:middle_name

name:name

linkUri:linkUri

头像:iconurl(6.2以前用profilePictureUri)

twitter

uid 用户id

access_token accessToken (6.2以前用access_token)

access_token_secret

name(6.2以前用username)

领英

名:firstName

姓:lastName

头像:iconurl(6.2以前用profile_image_url)

名字:name(6.2以前用screen_name)

头衔:headline

国家代码:location_country_code

uid:uid

所在地:location_name