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

来源:http://www.cnblogs.com/shen-hua/archive/2016/12/05/6133115.html
-Advertisement-
Play Games

onClickLogin()方法: loginListener介面: updateUserInfo()方法: 必須重寫onActivityResult()方法 ...


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圖片,這樣即使你設置了清楚緩存,在返回給頁面時也會重新去獲取用戶頭像

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. ...
  • 組內非同步會與組外順序執行的事件爭搶資源 1)、創建一個組 2)、組內非同步ST1,DISPATCH_QUEUE_PRIORITY_DEFAULT 為預設優先順序 3)、組內非同步ST2,DISPATCH_QUEUE_PRIORITY_DEFAULT 為預設優先順序 4)、組內通知,獲取主線程。組內非同步全部執 ...
  • viewport預備知識 dpr === dppx dpr:device pixel ratio 設備像素比 dppx:Number of dots per px unit 每像素有多少點 。 1dppx = 96dpi dpr = 設備物理像素 / 設備獨立像素 設備物理像素指顯示在移動端中實際的 ...
  • 在學習新內容之前,我們先來弄清楚兩個問題: 1 . 什麼是ViewGroup? ViewGroup是一種容器。它包含零個或以上的View及子View。 2 . ViewGroup有什麼作用? ViewGroup內部可以用來存放多個View控制項,並且根據自身的測量模式,來測量View子控制項,並且... ...
  • 提交審核後進去下麵鏈接申請加急審核鏈接:https://developer.apple.com/appstore/contact/appreviewteam/index.html 在I would like to選擇加急審核(預設選項) 填寫相關信息 最後一項可以不填 最後是申請原因跟理由 看見別人 ...
  • 我們在手機上查看相冊時,首先看到的是網格狀的圖片展示界面,然後我們選擇想要欣賞的照片點擊進入,這樣就可以全屏觀看該照片,並且可以通過左右滑動來切換照片。如下圖的顯示效果: 首先我們先羅列一下本次實現所要用的知識點: (1)首頁界面,我們需要可以通過GridView來實現,有關GridView的實現代 ...
  • 1、並行-非同步(ST1與ST2搶占資源) 1-1)、獲取 並行(全局)隊列 ,DISPATCH_QUEUE_PRIORITY_DEFAULT 為預設優先順序。 1-2)、創建非同步事件。 2、串列-同步(順序執行) 2-1)、創建串列隊列,DISPATCH_QUEUE_SERIAL 為串列 2-2)、創 ...
  • 前言 在學習一門新技術的你也許有跟我一樣的困惑,照著書上或者視頻上的敲了。但是就是有各種問題沒有出來自己想要的結果。我會將自己在這個過程中遇到的坑都記錄下來,不一定全覆蓋,但希望這些文章可以解決你的問題。 錯誤提示 Invariant Violation:Applicaction 項目名 has n ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...