Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> QQ互聯登錄以及非官方正版應用報100044錯誤,互聯100044

QQ互聯登錄以及非官方正版應用報100044錯誤,互聯100044

編輯:關於android開發

QQ互聯登錄以及非官方正版應用報100044錯誤,互聯100044


QQ第三方登錄的時候,顯示非官方正版應用,報100044錯誤;
坑1:我們在QQ互聯注冊成功後需要設置包名和簽名,簽名是通過官方提供的工具生成的。注意一點:這裡的簽名是需要由打包簽名之後APK生成,我們測試的時候是沒有經過簽名的,所以一般我們至少在這裡需要添加兩個簽名:一個我們開發測試的APP直接通過官方工具生成的簽名,另一個使我們APP經過我們自己的簽名文件簽名打包後通過官方提供的工具生成的簽名;

 

 @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.iv_login_qq://點擊qq登錄
                onClickLogin();
                break;
        }
    }

 

onClickLogin()方法:

private void onClickLogin() {
        if (!mTencent.isSessionValid()) {
            mTencent.login(this, "all", loginListener);
            isServerSideLogin = false;
        } else {
            if (isServerSideLogin) { // Server-Side 模式的登陸, 先退出,再進行SSO登陸
                mTencent.logout(this);
                mTencent.login(this, "all", loginListener);
                isServerSideLogin = false;
                return;
            }
            mTencent.logout(this);
        }

loginListener接口:

 IUiListener loginListener = new BaseUiListener() {
        @Override
        protected void doComplete(JSONObject values) {
            Timestamp = SystemClock.elapsedRealtime() + "";
            Log.d(TAG,
                    "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime());
            initOpenidAndToken(values);//獲取登錄返回信息token等
            updateUserInfo();//異步更新保存用戶信息
        }
    };
initOpenidAndToken()方法:
 public void initOpenidAndToken(JSONObject jsonObject) {
        try {
            token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
            expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
            openId_qq = jsonObject.getString(Constants.PARAM_OPEN_ID);
            Log.d(TAG, "initOpenidAndToken: token:" + token);
            Log.d(TAG, "initOpenidAndToken: expires:" + expires);
            Log.d(TAG, "initOpenidAndToken: openId:" + openId_qq);
            if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                    && !TextUtils.isEmpty(openId_qq)) {
                mTencent.setAccessToken(token, expires);
                mTencent.setOpenId(openId_qq);
            }
        } catch (Exception e) {
        }
    }

updateUserInfo()方法:

private void updateUserInfo() {
        if (mTencent != null && mTencent.isSessionValid()) {
            IUiListener listener = new IUiListener() {

                @Override
                public void onError(UiError e) {
                    Log.d(TAG, "onError: ");
                }

                @Override
                public void onComplete(final Object response) {
                    new Thread() {

                        @Override
                        public void run() {
                            JSONObject json = (JSONObject) response;if (json.has("figureurl")) {
                                try {
                                    String userName = json.getString("nickname");
                                    Log.d(TAG, "run: " + userName);
                                    String userIcon = json.getString("figureurl_qq_2");
                                    Log.d(TAG, "run: " + userIcon);
                                    String gender = json.getString("gender");
                                    String province = json.getString("province");
                                    String city = json.getString("city");
                                    SharedPreferences user_login = LoginActivity.this.getSharedPreferences("user_login", MODE_PRIVATE);
                                    SharedPreferences.Editor edit = user_login.edit();
                                    edit.putString("user_name", userName);
                                    edit.putString("user_pic", userIcon);
                                    edit.putString("gender", gender);
                                    edit.putString("province", province);
                                    edit.putString("city", city);
                                    edit.putString("openid_qq", openId_qq);
                                    edit.commit();
                                    mHandler.sendEmptyMessage(POST_LOGIN_INIFO);
                                } catch (JSONException e) {

                                }
                            }
                        }

                    }.start();
                }

                @Override
                public void onCancel() {
                    Log.d(TAG, "onCancel: ");
                }
            };
            mInfo = new UserInfo(this, mTencent.getQQToken());
            mInfo.getUserInfo(listener);

        } else {
//            mUserInfo.setText("");
//            mUserInfo.setVisibility(android.view.View.GONE);
//            mUserLogo.setVisibility(android.view.View.GONE);
        }
    }

必須重寫onActivityResult()方法

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d(TAG, "-->onActivityResult:requestCode= " + requestCode + " resultCode="
                + resultCode);
        if (requestCode == Constants.REQUEST_LOGIN
                || requestCode == Constants.REQUEST_APPBAR) {
            Tencent.onActivityResultData(requestCode, resultCode, data,
                    loginListener);
            AppShared.setUserLogin(this, true);
            ToastUtils.toast("登錄成功");
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

 

 一個建議:用戶頭像建議保存用戶頭像鏈接後再直接保存bitmap,在onResume中下載Bitmap圖片,這樣即使你設置了清楚緩存,在返回給頁面時也會重新去獲取用戶頭像

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved