对接第三方qq登录

在qq互联上登录创建应用,【有注册开发者身份】QQ互联,然后下载对应的sdk,去下载

之后解压。

创建一个工程【或原有的工程里】,并把open-sdk.jar(压缩包中文件名为:open_sdk_xxxx_lite.jar)文件拷贝到libs(或lib)目录下,如下图所示:

æ­¤å¾åçaltå±æ§ä¸ºç©ºï¼æ件å为ä¼ä¸å¾®ä¿¡æªå¾_0e5b5994-8667-4358-93e9-d4c438f4a7df.png

然后配置AndroidManifest;
在应用的AndroidManifest.xml增加配置的<application>节点下增加以下配置(注:不配置将会导致无法调用API);

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application>
 <activity
       android:name="com.tencent.tauth.AuthActivity"
       android:noHistory="true"
       android:launchMode="singleTask" >
    <intent-filter>
           <action android:name="android.intent.action.VIEW" />
           <category android:name="android.intent.category.DEFAULT" />
           <category android:name="android.intent.category.BROWSABLE" />
           <data android:scheme="tencent你的AppId" />
    假如你的appid是12345
 <data android:scheme="tencent12345 />
    </intent-filter>
 </activity>
<activity
       android:name="com.tencent.connect.common.AssistActivity"
       android:configChanges="orientation|keyboardHidden"
       android:screenOrientation="behind" 
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<application>

接着初始化SDK

3.5.7版本新增接口提供用户设置是否已授权获取设备信息,在调用互联SDK相关功能接口之前,需要应用在确认用户已授权应用获取设备信息后,调用下面代码通知 SDK:

Tencent.setIsPermissionGranted(true);

如果未调用该接口或传参为false时,调用其它功能接口将直接返回失败。

示例代码

 



public class OneClickLoginActivity extends AppCompatActivity {
    private static final String TAG = "OneClickLoginActivity";
    private static final String APP_ID = "123456";//你的qq互联上面的appid
    @BindView(R.id.ll_qq_login)
    LinearLayout llQqLogin;
    @BindView(R.id.iv_wb_icon)
    ImageView ivWbIcon;
    @BindView(R.id.tv_wb)
    TextView tvWb;
    public static Tencent mTencent;
    //QQ包名
    private static final String PACKAGE_QQ = "com.tencent.mobileqq";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one_click_login);
        Tencent.setIsPermissionGranted(true);
        ButterKnife.bind(this);
        mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());

    }


    @OnClick({R.id.ll_qq_login})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.ll_qq_login:
            
                if (!hasApp(PACKAGE_QQ)) {
                    Toast.makeText(OneClickLoginActivity.this, "未安装QQ应用",
                            Toast.LENGTH_SHORT).show();
                    return;
                }
                loginQQ();
                break;

        }
    }

    /**
     * QQ登录
     */
    private IUiListener listener;

    private void getUnionId() {
        if (mTencent != null && mTencent.isSessionValid()) {
            IUiListener listener = new IUiListener() {
                @Override
                public void onError(UiError e) {
                    Toast.makeText(OneClickLoginActivity.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");

                        } catch (Exception e) {
                            Toast.makeText(OneClickLoginActivity.this, "no unionid", Toast.LENGTH_LONG).show();
                        }
                    } else {
                        Toast.makeText(OneClickLoginActivity.this, "no unionid", Toast.LENGTH_LONG).show();
                    }
                }

                @Override
                public void onCancel() {
                    Toast.makeText(OneClickLoginActivity.this, "onCancel", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onWarning(int i) {

                }
            };
            UnionInfo unionInfo = new UnionInfo(this, mTencent.getQQToken());
            unionInfo.getUnionId(listener);
        } else {
            Toast.makeText(this, "please login frist!", Toast.LENGTH_LONG).show();
        }
    }

    private void loginQQ() {
        listener = new IUiListener() {
            @Override
            public void onComplete(Object object) {

                Log.e(TAG, "登录成功: " + object.toString());

                JSONObject jsonObject = (JSONObject) object;
                try {
                    //得到token、expires、openId等参数
                    String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
                    String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
                    String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
                    mTencent.setAccessToken(token, expires);
                    mTencent.setOpenId(openId);
                    Log.e(TAG, "token: " + token);
                    Log.e(TAG, "expires: " + expires);
                    Log.e(TAG, "openId: " + openId);
                    //获取UnionId
                    getUnionId();
                    //获取个人信息
                    getQQInfo();
                } catch (Exception e) {
                }
            }

            @Override
            public void onError(UiError uiError) {
                //登录失败
                Log.e(TAG, "登录失败" + uiError.errorDetail);
                Log.e(TAG, "登录失败" + uiError.errorMessage);
                Log.e(TAG, "登录失败" + uiError.errorCode + "");

            }

            @Override
            public void onCancel() {
                //登录取消
                Log.e(TAG, "登录取消");

            }

            @Override
            public void onWarning(int i) {

            }
        };
        //context上下文、第二个参数SCOPO 是一个String类型的字符串,表示一些权限
        //应用需要获得权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all”
        //第三个参数事件监听器
        mTencent.login(this, "all", listener);
        //注销登录
        //mTencent.logout(this);
    }
    /**
     * 获取QQ个人信息
     */
    private void getQQInfo() {
        //获取基本信息
        QQToken qqToken = mTencent.getQQToken();
        UserInfo info = new UserInfo(this, qqToken);
        info.getUserInfo(new IUiListener() {
            @Override
            public void onComplete(Object object) {
                try {
                    Log.e(TAG, "个人信息:" + object.toString());
                    //头像
                    String avatar = ((JSONObject) object).getString("figureurl_2");
                    String nickName = ((JSONObject) object).getString("nickname");

                    if (!avatar.equals("")) {
//需要添加Glide库进行图片展示                        Glide.with(OneClickLoginActivity.this).load(avatar).into(ivWbIcon);
                    }
                    tvWb.setText(nickName);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(UiError uiError) {
            }

            @Override
            public void onCancel() {
            }

            @Override
            public void onWarning(int i) {

            }
        });
    }

    /**
     * 回调必不可少,官方文档未说明
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //腾讯QQ回调
        Tencent.onActivityResultData(requestCode, resultCode, data, listener);
        if (requestCode == Constants.REQUEST_API) {
            if (resultCode == Constants.REQUEST_LOGIN) {
                Tencent.handleResultData(data, listener);
            }
        }
    }


 /**
  * true 安装了相应包名的app
 */
    private boolean hasApp(String packName) {

        boolean is = false;
        List<PackageInfo> packages = getPackageManager()
                .getInstalledPackages(0);
        for (PackageInfo packageInfo : packages) {
            // 判断系统/非系统应用
            if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) // 非系统应用
            {

                String packageName = packageInfo.packageName;


                if (packageName.equals(packName)) {
                    is = true;
                }

            } else {
                // 系统应用
            }
        }

        return is;
    }
}

注。获取unionid在QQ互联上默认是不开启的,需要你自己手动开启,在下面的位置【需要绑定】

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接入第三方平台的openapi是通过获取access_token和openid来实现的。首先,你需要申请开发者账号并创建应用,获得一组AppId和AppKey。然后,使用这些凭证去获取access_token和openid。access_token是访问第三方平台开放接口的令牌,而openid是用户在第三方平台的唯一标识。获取了这些凭证后,你就可以使用openapi来访问或修改用户信息了。具体的流程可能会因不同的第三方平台而有所差异,比如微信和支付宝的接入条件不同,但总体上都是基于这些凭证来进行操作的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [海康iSC平台测试第三方对接接收事件工具](https://download.csdn.net/download/weixin_47671482/13777744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑](https://download.csdn.net/download/weixin_38613154/13734050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [SpringBoot项目接入支付宝第三方登录](https://blog.csdn.net/qq_41057885/article/details/105789612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值