Android對接微信登錄記錄

来源:https://www.cnblogs.com/stars-one/archive/2023/12/23/17923119.html
-Advertisement-
Play Games

Android對接微信登錄記錄 - Stars-One的雜貨小窩 Android項目要對接下微信登錄,稍微記錄下踩坑點 代碼 1.添加依賴 implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0' 2.聲明Activity 在你 ...


Android對接微信登錄記錄 - Stars-One的雜貨小窩

Android項目要對接下微信登錄,稍微記錄下踩坑點

代碼

1.添加依賴

implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'

2.聲明Activity

在你的清單文件添加下麵Activity聲明

<application>
	<activity
		android:name="com.test.my.wxapi.WXEntryActivity"
		android:label="@string/app_name"
		android:theme="@android:style/Theme.Translucent.NoTitleBar"
		android:exported="true"
		android:taskAffinity="${applicationId}"
		android:launchMode="singleTask">
	</activity>
</application>


<queries>
	<!-- 指定微信包名-->
	<package android:name="com.tencent.mm" />
</queries>

註意這裡android:name="com.test.my.wxapi.WXEntryActivity"

實際上,我的applicationId就是com.test.my

2.創建Activity和處理回調

由於我的applicationId是com.test.my,但是由於我packageName不是這個,所以我得創建一個包名存放WXEntryActivity

class WXEntryActivity : Activity(), IWXAPIEventHandler {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

		//沒有這個,不會走下麵的2個onReq和onResp回調的
        WxLoginUtil.api.handleIntent(intent,this)
    }

    override fun onReq(p0: BaseReq) {

    }

    override fun onResp(resp: BaseResp) {
        Log.d(WxLoginUtil.TAG, "onResp: 進入WXEntryActivity onResp回調處理")

        if (resp is SendAuth.Resp) {
            Log.d(WxLoginUtil.TAG, "onResp:  onResp回調處理")
            //微信登錄回調處理
            WxLoginUtil.handleResp(resp)
        }

        //關閉當前微信頁面(是透明的),否則會攔截掉原頁面點擊事件
        finish()
    }
}

4.處理回調

這裡補充下handleResp里的寫法,實際上很簡單

有以下步驟:

  1. 處理回調,得到授權code
  2. 根據授權code,獲取到access_token
  3. 根據access_token,得到最終的用戶信息
  4. 拿到用戶信息,之後編寫你自己需要的邏輯即可

這裡不詳細說了,就是依次調用介面就完事了
步驟2調用此https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appId&secret=$appSecret&code=${code}&grant_type=authorization_code
步驟3調用此https://api.weixin.qq.com/sns/userinfo?access_token=${token}&openid=${wxAccessInfo.openid}&lang=${lang}

lang是微信回調SendAuth.Resp對象里的數據

坑點

1.無法回調WxEntryActivity頁面

從以下步驟排查:

  1. WxEntryActivity是否調用api.handleIntent(intent,this)
  2. 註意WxEntryActivity包名應該與你的applicationId相同,而不是你的包名文件夾

微信wxapi的文件結構包名必須和你填寫的applicationId相同

例如你的程式結構是com.wx.mm,但是你的applicationId是com.wx.mm.qq。這時候創建wxapi包的時候,路徑就必須是com.wx.mm.qq.wxapi這時候微信才能正常回調。

2.回到登錄頁面,無法點擊

實際上,從登錄頁喚起微信,再返回,此時上一層頁面是微信的那個WXEntryActivity頁面,因為它是透明的,所以攔截了我們原來登錄頁面的點擊事件

解決方法就是在回調的時候,把它頁面調用finish關掉即可

3.出現錯誤40163 code been used

這個問題是請求獲取access_token數據的介面返回的,解釋說code參數是已被消費

我檢測了一遍代碼,發現沒有重覆請求

但最後想起了,項目里用的網路請求框架liangjingkanji/Net: Android 基於協程/OkHttp網路請求工具

然後趕緊直接用okhttp寫了個簡單的get請求,於是就是完美解決問題...無語了,只能說不要輕信別人封裝的框架

真相是Net這個網路框架始終返回的是第二次調用介面給回的數據

還有其他網友說如果和友盟分享一起使用,可能也會有這個問題,因為微信分享和微信登錄最終都會回調WxEntryActivity頁面的

所以如果是和友盟分享使用的話,可以直接繼承友盟分享里的那個WxEntryActivity頁面,然後添加邏輯就可以了


提問之前,請先看提問須知 點擊右側圖標發起提問 聯繫我 或者加入QQ群一起學習 Stars-One安卓學習交流群 TornadoFx學習交流群:1071184701
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • git教程 代碼托管平臺:git.acwing.com 1 git基本概念 工作區:倉庫的目錄。工作區是獨立於各個分支的。 暫存區:數據暫時存放的區域,類似於工作區寫入版本庫前的緩存區。暫存區是獨立於各個分支的。切換分支不會新創建暫存區。 版本庫:存放所有已經提交到本地倉庫的代碼版本 版本結構:樹結 ...
  • 版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 ————— 作者:kirin Linux 定位伺服器硬碟槽位的方法 1、安裝sas3ircu工具 2、獲取磁碟SN號碼 2.1、使用smartctl命令獲取 smartctl -a /dev/sd* |grep Serial 2.2、查看文件獲取 ...
  • 面試題 海量數據里查詢某一固定首碼的key 生產上如何限制 keys * / flushdb / flushall 等危險命令以防止誤刪誤用? MEMORY USAGE 命令用過嗎? BigKey問題,多大算big?如何發現?如何刪除?如何處理? BigKey你做過調優嗎?惰性釋放lazyfree了 ...
  • 一、在本地電腦上安裝Docker 1.安裝Docker (安裝最新的Docker版本) yum install docker-ce docker-ce-cli containerd.io docker-bulidx-plugin docker-compose-plugin 2.查看Docker版本 ...
  • 一、HBase Shell操作 1、基本操作 1)進入HBase客戶端命令行 [root@bigdata1 hbase]$ bin/hbase shell 2)查看幫助命令 hbase(main):001:0> help 3)查看當前資料庫中有哪些表 hbase(main):002:0> list ...
  • 目錄Hive集成表引擎創建表使用示例如何使用HDFS文件系統的本地緩存查詢 ORC 輸入格式的Hive 表在 Hive 中建表在 ClickHouse 中建表查詢 Parquest 輸入格式的Hive 表在 Hive 中建表在 ClickHouse 中建表查詢文本輸入格式的Hive表在Hive 中建 ...
  • 一、異常信息描述 執行資料庫操作時,主鍵id沒有自增,且報“more than one owned sequence found”的異常,造成數據沒有insert進去,下麵是詳細的異常信息: java.lang.reflect.InvocationTargetException at sun.ref ...
  • 本文深入探討了安卓DocumentsProvider的應用場景,分析了其優勢與不足,並提供了簡單的代碼實現。DocumentsProvider是安卓系統中用於文件存儲與訪問的關鍵組件,為應用開發者提供了強大的文件管理能力。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...