• Android ShareSDKQQ 第三方登录so easy?


    昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下。事实上都不难的,事实上之前我又写到FaceBook的第三方登录不知道看下这Android集成FaceBook登入《-》 今天仅仅举例QQ登录其它像微信大同小异须要微信工具签名然后md5+包名等。

    开车啦

    这里写图片描写叙述

    准备工作须要下载ShareSDK这里我不再赘述不知道的看我的这篇文章ShareSDK社会化分享之那些年我们踩过的坑我这里不再赘述由于非常多步骤是反复的。

    然后在项目project中assets文件下改动ShareSDK.xml文件更改您的Appkey

    这里写图片描写叙述

    然后QQ第三方登录准备的Jar点击直接下载opensdk
    然后解压将jar放到project中的libs中例如以下图所看到的

    这里写图片描写叙述

    1、申请appid和appkey的用途

    appid :应用的唯一标识。

    在OAuth2.0认证过程中。appid的值即为oauth_consumer_key的值。

    appkey:appid相应的密钥,訪问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中。appkey的值即为oauth_consumer_secret的值。

    这里写图片描写叙述

    2、配置清单文件AndroidMainfest.xml
    2.1加入相关权限

    <!-- 加入权限 -->
     <uses-permission android:name="android.permission.GET_TASKS" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
     <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
     <!-- 蓝牙分享所需的权限 -->
      <uses-permission android:name="android.permission.BLUETOOTH" />
      <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    
                <activity
                android:name="com.mob.tools.MobUIShell"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:windowSoftInputMode="stateHidden|adjustResize">

    2.2微信授权回调

    <!--微信分享回调 -->
               <activity
                android:name=".wxapi.WXEntryActivity"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:exported="true"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Translucent.NoTitleBar" />

    2.3注冊Activity

      <!-- 注冊SDKActivity -->
               <activity
                android:name="com.tencent.tauth.AuthActivity"
                android:launchMode="singleTask"
                android:noHistory="true">
                <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="tencent1105658914" /> <!-- 开放平台获取的APPID -->
                </intent-filter>
            </activity>
             <activity
                android:name="com.tencent.connect.common.AssistActivity"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Translucent.NoTitleBar" />
            <activity android:name=".bdmap.BMapActivity" />

    3、代码简单实现

    声明变量

        private Tencent mTencent;
        private BaseUiListener mIUiListener;
        private UserInfo mUserInfo;
        private CallbackManager  mCallBackManager;

    SDK初始化这个大多数都会有须要注意的这里是传入getApplicationContext

      mTencent=Tencent.createInstance(AppConstant.APP_ID,LoginActivity.this.getApplicationContext());

    3.1 QQ登录授权接口回调

    
        public void QQLogin(View v) {
            mIUiListener = new BaseUiListener();
            //all表示获取全部权限
            mTencent.login(LoginActivity.this,"all", mIUiListener);
            //授权成功后跳转到引导页面
            startActivity(new Intent(LoginActivity.this,WelcomeGuideActivity.class));
        }

    3.2自己定义监听器实现IUiListener接口后,须要实现的3个方法 onComplete完毕 onError错误 onCancel取消

        /**
         * 自己定义监听器实现IUiListener接口后。须要实现的3个方法
         * onComplete完毕 onError错误 onCancel取消
         */
        private class BaseUiListener implements IUiListener{
    
            @Override
            public void onComplete(Object response) {
                Toast.makeText(LoginActivity.this, "授权成功", Toast.LENGTH_SHORT).show();
                Log.e(TAG, "response:" + response);
                JSONObject obj = (JSONObject) response;
                try {
                    String openID = obj.getString("openid");
                    String accessToken = obj.getString("access_token");
                    String expires = obj.getString("expires_in");
                    mTencent.setOpenId(openID);
                    mTencent.setAccessToken(accessToken,expires);
                    QQToken qqToken = mTencent.getQQToken();
                    mUserInfo = new UserInfo(getApplicationContext(),qqToken);
                    mUserInfo.getUserInfo(new IUiListener() {
                        @Override
                        public void onComplete(Object response) {
                            Log.e(TAG,"登录成功"+response.toString());
                        }
    
                        @Override
                        public void onError(UiError uiError) {
                            Log.e(TAG,"登录失败"+uiError.toString());
                        }
    
                        @Override
                        public void onCancel() {
                            Log.e(TAG,"登录取消");
    
                        }
                    });
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onError(UiError uiError) {
                Toast.makeText(LoginActivity.this, "授权失败", Toast.LENGTH_SHORT).show();
    
            }
    
            @Override
            public void onCancel() {
                Toast.makeText(LoginActivity.this, "授权取消", Toast.LENGTH_SHORT).show();
    
            }
    
    
        }

    3.3在调用Login的Activity或者Fragment中重写onActivityResult方法

     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(requestCode == Constants.REQUEST_LOGIN){
                Tencent.onActivityResultData(requestCode,resultCode,data,mIUiListener);
            }
                   super.onActivityResult(requestCode, resultCode, data);
        }

    总结:

    整个流程例如以下图所看到的

    这里写图片描写叙述

    效果例如以下图所看到的360高清无码正在载入中别眨眼!

    为了做个这东西把自己QQ都卖了我easy吗?我没办法老司机!


    这里写图片描写叙述

    转载请注明出处同一时候欢迎大家加我的群号。欢迎开车,自己能够去尝试做一下我这里可能也不是非常完整。最好建议大家去管网看文档!

    应该是没问题的!

    我这人有一点不好不喜欢拖拉!喜欢的事情就去做!

    由于年轻!

    由于任性!由于代码是敲出来的!

    还记得我有个群友代码9.99评分豆瓣棒棒哒!

    来个合照疯狂Android进阶之旅

  • 相关阅读:
    vue-Prop
    C#四舍五入的方法
    设计模式-建造者模式
    vue-解决Vue打包上线之后部分CSS不生效的问题
    vue项目兼容IE浏览器
    html-box-sizing
    MSSQLSERVER执行计划详解
    white-space和word-wrap和word-break所表示的换行和不换行的区别
    JS设置cookie、读取cookie、删除cookie
    windows7 telnet服务开启和登录授权
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7347634.html
Copyright © 2020-2023  润新知