分享到 :

UnionID介绍

接口说明:

此接口用于获取个人信息。开发者可通过openID来获取用户的基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用,可通过获取用户的unionID来区分用户的唯一性,因为只要是同一QQ互联平台下的不同应用,unionID是相同的。换句话说,同一用户,对同一个QQ互联平台下的不同应用,unionID是相同的。(已支持官网自助获取:点此查看操作指引

请求方式:

(一)https请求方式:GET

https://graph.qq.com/oauth2.0/me?access_token=ACCESSTOKEN&unionid=1
参数 是否必需 说明
access_token  是 用户凭证
unionid  否 是否申请unionID
fmt  否 因历史原因,默认是jsonpb格式,如果填写json,则返回json格式

返回说明:
正确的返回结果(如果fmt参数未指定json)

callback(
{
  "client_id":"YOUR_APPID",
  "openid":"YOUR_OPENID",
  "unionid":"YOUR_UNIONID"
}
);

错误的(如果fmt参数未指定json)返回示例

callback(
{
  "error":100016,
  "error_description":"access token check failed",
}
);
错误码 描述 说明
100016 access token check failed 用户凭据过期(90天)或者不正确
100048 companyid not set 未申请unionID接口调用权限,请邮件申请

(二)Android_SDK 请求方式:

调用获取unionID信息接口的示例代码如下

private void getUnionId() {
   if (mTencent != null && mTencent.isSessionValid()) {
     IUiListener listener = new IUiListener() {
       @Override
       public void onError(UiError e) {
        Toast.makeText(MainActivity.this,"onError",Toast.LENGTH_LONG).show();
       }
       @Override
       public void onComplete(final Object response) {
         if(response != null){
           JSONObject jsonObject = (JSONObject)response;
           try {
             String unionid = jsonObject.getString("unionid");
             Util.showResultDialog(MainActivity.this, "unionid:\n"+unionid, "onComplete");
             Util.dismissDialog();
           }catch (Exception e){
             Toast.makeText(MainActivity.this,"no unionid",Toast.LENGTH_LONG).show();
           }
        }else {
           Toast.makeText(MainActivity.this,"no unionid",Toast.LENGTH_LONG).show();
        }
      }
      @Override
      public void onCancel() {
        Toast.makeText(MainActivity.this,"onCancel",Toast.LENGTH_LONG).show();
      }
    };
    UnionInfo unionInfo = new UnionInfo(this, mTencent.getQQToken());
    unionInfo.getUnionId(listener);
   } else {
     Toast.makeText(this,"please login frist!",Toast.LENGTH_LONG).show();
   }
 }

返回说明:
正确的返回结果

{
"client_id":"YOUR_APPID",
"openid":"YOUR_OPENID",
"unionid":"YOUR_UNIONID"
}

(三)IOS_SDK 请求方式:
调用获取unionID信息接口的示例代码如下

BOOL bRet = [[[sdkCall getinstance] oauth] RequestUnionId];
if (!bRet) {
  UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"信息不足,请先登录。" 
  delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil, nil];
  [alertView show];
  __RELEASE(alertView);
}

返回说明:
如果获取成功会在TencentLoginDelegate的didGetUnionID回调中回调,最后在oauth实例中获取,正确的返回结果

NSString *result = [NSString stringWithFormat:@"获取成功 appid = %@,\n openid = %@,\n unionid = %@",
[[sdkCall getinstance].oauth.appId],
[sdkCall getinstance].oauth.openId,
[sdkCall getinstance].oauth.unionId];

参数说明:

说明
client_id 应用唯一标识
openid QQ用户在应用的唯一账号标识,同一个用户在不同应用的openid不一样。
unionid QQ用户在开发者在多个应用间(打通后)的标识,打通后,不同应用的unionid一样

注意:

(1)开发者应该注意保存openID、unionID信息,以便以后在不同应用之间进行用户信息互通;
(2)同一开发者名下最多支持60个应用进行UnionID打通,请开发者申请时注意;

(3) unionID至少是36个字节长度,建议开发者预留64字节存储空间。

返回顶部