uniapp開發微信小程序(新舊版本對比:授權手機號登錄、授權頭像和昵稱)

目錄標題

    • 授權手機號
      • 新舊版本核心差異對比
      • 強制使用新版的情況
      • 代碼實現方案
      • 特殊處理邏輯
      • 企業賬號要求
      • 最佳實踐建議
    • 授權頭像和昵稱
      • 新舊版本核心差異對比
      • 強制使用新版的情況
      • 代碼實現方案
      • 最佳實踐建議
      • 注意事項

授權手機號

新舊版本核心差異對比

觸發方式
舊版(2023年前)通過 <button open-type="getPhoneNumber"> 觸發,新版(2023年后)沿用相同方式但要求企業資質

數據返回
舊版返回 encryptedDataiv 需后端解密,新版直接返回 code 供后端換取手機號。

費用
舊版免費,新版每次調用需支付 0.03 元起。

兼容性
舊版僅支持基礎庫版本低于 2.21.2,新版強制要求基礎庫版本 ≥ 2.21.2。


強制使用新版的情況

新注冊小程序
無論基礎庫版本如何,必須使用新版接口。

已過審小程序
若更新代碼需適配新版接口,否則無法通過審核。

安全要求
新版需完成企業認證并開通微信支付。


代碼實現方案

版本檢測與兼容處理

const systemInfo = getCompatSystemInfo();
const isNewVersion = compareVersion(systemInfo.SDKVersion, '2.21.2') >= 0;

utils.js


/*** 獲取兼容性系統信息* @returns {Object} 包含SDKVersion/windowWidth/system等字段的對象*/
export const  getCompatSystemInfo = () =>{// 優先嘗試新API組合 (2.20.1+)if (uni.getDeviceInfo && uni.getWindowInfo) {const deviceInfo = uni.getDeviceInfo();const windowInfo = uni.getWindowInfo();return {SDKVersion: uni.getAppBaseInfo().SDKVersion,windowWidth: windowInfo.windowWidth,windowHeight: windowInfo.windowHeight,system: deviceInfo.system,platform: deviceInfo.platform};}// 降級使用舊APIconst legacyInfo = uni.getSystemInfoSync();return {SDKVersion: legacyInfo.SDKVersion,windowWidth: legacyInfo.windowWidth,windowHeight: legacyInfo.windowHeight,system: legacyInfo.system,platform: legacyInfo.platform};
}
/*** 比較兩個版本號字符串的大小* @param {string} v1 - 版本號1 (格式如"1.2.3")* @param {string} v2 - 版本號2 (格式如"1.2.4")* @returns {number} *   1: v1 > v2*  -1: v1 < v2*   0: v1 == v2*/
export const  compareVersion = (v1, v2) => {// 將版本號字符串拆分為數字數組(如"1.2.3" → [1,2,3])const v1Arr = v1.split('.').map(Number);const v2Arr = v2.split('.').map(Number);// 比較最多3位版本號(支持4位可修改循環條件)for (let i = 0; i < 3; i++) {// 如果當前位v1大于v2,直接返回1if (v1Arr[i] > v2Arr[i]) return 1;// 如果當前位v1小于v2,直接返回-1if (v1Arr[i] < v2Arr[i]) return -1;}// 所有位都相同則返回0return 0;
}
<button  open-type="getPhoneNumber" @getphonenumber="registerUser">授權手機號一鍵登錄
</button>

舊版實現代碼

getPhoneNumber(e) {if (!isNewVersion && e.detail.encryptedData) {uni.login({success: (res) => {uni.request({url: 'YOUR_API',data: {code: res.code, iv: e.detail.iv,encryptedData: e.detail.encryptedData}})}})}
}

新版實現代碼

getPhoneNumber(e) {if (isNewVersion && e.detail.code) {uni.login({success: (res) => {uni.request({url: 'YOUR_API',data: {wx_code: res.code,phone_code: e.detail.code}})}})}
}
if (e.detail?.errMsg !== "getPhoneNumber:ok") {console.log("授權失敗")return;
}

特殊處理邏輯

降級方案
通過 wx.canIUse() 檢測接口可用性,確保兼容性。

錯誤處理
需捕獲 getPhoneNumberfail 回調,處理授權失敗情況。

UI適配
建議使用條件渲染展示不同按鈕文案,提升用戶體驗。


企業賬號要求

舊版
僅需完成企業認證即可使用。

新版
需額外完成微信支付認證并開通相應權限。

測試號
提供 1000 次免費調用額度供開發測試使用。


最佳實踐建議

新項目
必須使用新版接口,并提前規劃調用預算。

存量項目
建議逐步遷移至新版接口,過渡期做好雙版本兼容。

個人開發者
無法使用手機號授權功能,需升級為企業主體。

授權頭像和昵稱

新舊版本核心差異對比

微信小程序獲取用戶頭像和昵稱的新舊版本在API接口、觸發條件、數據返回等方面存在顯著差異:

舊版實現方式(2022年前)

  • 使用wx.getUserInfowx.getUserProfile接口
  • 需要用戶主動授權彈窗
  • 直接返回包含用戶信息的對象
  • 對基礎庫版本無特殊要求

新版實現方式(2022年后)

  • 使用chooseAvatar按鈕和nickname輸入框
  • 必須通過按鈕點擊觸發
  • 頭像返回臨時路徑,昵稱需安全檢測
  • 要求基礎庫版本≥2.21.2

強制使用新版的情況

  • 新注冊的小程序必須使用新版接口
  • 已過審的小程序在更新代碼時必須適配新版
  • 頭像內容需通過微信安全檢測

代碼實現方案

新版標準實現
chooseAvatar接口返回的是臨時文件路徑。為了確保頭像能夠長期存儲和展示,需要通過uni.uploadFile將該路徑上傳至服務器,并保存服務器返回的永久URL。

<!-- 頭像獲取 -->
<button open-type="chooseAvatar" @chooseavatar="onChooseAvatar">選擇頭像
</button><!-- 昵稱獲取 -->  
<input type="nickname" @blur="onNicknameBlur" />
export default {methods: {onChooseAvatar(e) {this.avatarUrl = e.detail.avatarUrlthis.uploadAvatar()},onNicknameBlur(e) {this.nickName = e.detail.value}}
}

舊版兼容方案
如果不滿足上述提及的使用舊版本的要求,以下代碼獲取得到的個人信息數據是默認數據,不是用戶真實的頭像和昵稱。(加密的數據中存放的也是默認數據。)

<button v-if="showLegacy" open-type="getUserInfo" @getuserinfo="getLegacyInfo">授權獲取信息
</button>
export default {data() {return {showLegacy: false}},mounted() {this.checkSDKVersion()},methods: {checkSDKVersion() {const { SDKVersion } = uni.getSystemInfoSync()this.showLegacy = this.compareVersion(SDKVersion, '2.21.2') < 0},compareVersion(v1, v2) {// 版本比較邏輯},getLegacyInfo(e) {console.log(e.detail.userInfo)}}
}

最佳實踐建議

  • 新項目必須使用新版方案
  • 存量項目建議通過條件編譯實現多版本共存

注意事項

  • 開發者工具與真機表現可能存在差異,需進行真機測試
  • 頭像臨時路徑需在24小時內上傳到服務器
  • 需提供用戶拒絕授權時的備選方案

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91486.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91486.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91486.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java函數式編程之【Stream終止操作】【下】【三】【收集操作collect()與分組分區】【下游收集器】

分組收集器groupingBy()&#xff1a;groupingBy()收集器用于按條件對元素象進行分組&#xff0c;并將結果存儲在Map實例中。其作用與數據庫的SQL語句的group by的用法有異曲同工之妙。 分區收集器partitioningBy()&#xff1a;partitioningBy()可以看作是分組groupingBy()的特殊…

python設計模式-工廠模式

工廠模式的核心思想&#xff1a;封裝對象創建過程、解耦對象使用與創建 。示例代碼&#xff1a;from enum import Enum# 基類&#xff1a;人類 class Person:species Homo sapiensdef __init__(self, name):self.name namedef __str__(self):return f"{self.__class__._…

Rust:anyhow::Result 與其他 Result 類型轉換

當函數返回的不是 anyhow::Result 而是其他 Result 類型時&#xff08;如 std::io::Result、serde_json::Result 或自定義 Result&#xff09;&#xff0c;可通過以下方法統一處理錯誤類型&#xff0c;確保與 anyhow 兼容或實現錯誤傳播&#xff1a;&#x1f6e0;? 一、錯誤類…

PLC-梯形圖編程

1.位運算,比較 如&#xff1a;>,<,, 2.定時器 生成脈沖TP&#xff0c;常開觸點閉合觸發&#xff0c;賦值10秒時長&#xff0c;PT配置參數&#xff0c;ET運行時已PT計時 接通延時TON&#xff0c;常開觸點閉合觸發&#xff0c;延時10秒后賦值 關斷延時TOF&#xff0c;常開觸…

LLM學習筆記5——InstructGPT

系列文章目錄 參考文獻 參考文獻 參考文獻 參考視頻 文章目錄系列文章目錄前言目前大模型不同的技術流派與框架路線&#xff1a;1. ??BERT&#xff1a;Encoder-only架構????1&#xff09; 架構特點????2&#xff09; 訓練目標??3&#xff09; ????應用場景2. …

熱能小車cad【12張】三維圖+設計說明書

摘要 無碳小車來自全國大學生工程能力訓練大賽題目&#xff0c;根據“節能減排&#xff0c;綠色出行”的環保理念&#xff0c;提出了一種基于熱力驅動的具有方向自動控制的無碳小車。 本文設計的無碳小車主要是將熱能轉化成機械能&#xff0c;用來驅動小車前進的裝置&#xff0…

云原生 DevOps 實戰之Jenkins+Gitee+Harbor+Kubernetes 構建自動化部署體系

技術背景? 在云原生生態中&#xff0c;工具鏈的選擇直接決定 CI/CD 流水線的效率與穩定性。本次方案的工具組合并非偶然&#xff0c;而是基于各組件的核心優勢與生態適配性&#xff1a;? 代碼管理層&#xff1a;Gitee 作為國內主流的代碼托管平臺&#xff0c;支持 Git 分布…

二建機電工程專業都考哪些知識點?

二建機電工程專業需要考《建設工程施工管理》《建設工程法規及相關知識》和《機電工程管理與實務》三個科目。其中《機電工程管理與實務》是專業科目&#xff0c;也是考試重點&#xff0c;主要考查機電工程技術、機電工程相關法規與標準、機電工程項目管理實務等內容。具體如下…

React + ts + react-webcam + CamSplitter 實現虛擬攝像頭解決win攝像頭獨占的問題

一、安裝 CamSplitter 這塊網上有很多教程了&#xff0c;這里不再贅述&#xff0c;就一點&#xff0c;需要分幾個虛擬攝像頭&#xff0c;就要在CamSplitter 的安裝目錄下 driver_install.cmd 執行幾次。二、React ts react-webcam 調用虛擬攝像頭import { useState, useEffec…

【深度學習①】 | Numpy數組篇

0 序言 本文為NumPy數組庫的系統學習筆記&#xff0c;將自己先前的筆記做一個總結歸納。內容涵蓋數組基礎、創建、索引、變形、運算、函數、布爾型數組及與張量的銜接等內容。通過具體示例解析核心概念與操作&#xff0c;幫助讀者掌握NumPy的使用邏輯與方法&#xff0c;為后續深…

5.實現 call

call 是 JavaScript 中非常核心的函數方法之一。它能改變函數的執行上下文&#xff08;也就是 this 的指向&#xff09;&#xff0c;在日常開發和面試中都極其常見。本文將帶你一步步實現一個 Function.prototype.call 的自定義版本&#xff0c;真正理解它的底層原理。? 一、c…

Go語言中的盲點:競態檢測和互斥鎖的錯覺

&#x1f9e0; Go語言中的盲點&#xff1a;競態檢測和互斥鎖的錯覺 使用 -race 就能發現所有并發問題&#xff1f;加了 mutex 就萬無一失&#xff1f; 這篇文章揭示了 Go 并發編程中的一個“危險盲區” —— 互斥鎖并不能總能保護你免受數據競爭的影響&#xff0c;尤其是在 -ra…

從文件到文件描述符:理解程序與文件的交互本質

一、理解文件 拋一個概念&#xff1a; 文件 內容 屬性。 1. 那么&#xff0c;空文件有大小嗎&#xff1f;答案是有的。因為空文件指的是文件內容為空&#xff0c;文件屬性也要占據大小啊。 將來對文件操作&#xff0c;無非分為兩類&#xff1a; 1.對文件內容做修改。 2.對文件…

優化算法專欄——閱讀導引

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…

[ The Missing Semester of Your CS Education ] 學習筆記 Vim篇

“Writing English words and writing code are very different activities. When programming, you spend more time switching files, reading, navigating, and editing code compared to writing a long stream.” —— < The Missing Semester of Your CS Education &g…

Linux 系統中定時執行指定命令 crontab 定時任務配置

crontab 定時任務配置是 Linux/Unix 系統中用于自動、周期性執行指定命令或腳本的工具&#xff0c;相當于系統的 “定時鬧鐘”。它可以讓系統在預設的時間&#xff08;如每天凌晨、每周一、每月 1 號等&#xff09;自動完成重復性工作&#xff0c;無需人工干預。自動化運維定期…

[ Leetcode ]---快樂數

題目鏈接 Leetcode快樂數 題目描述 如下圖&#xff1a; 題目解析&#xff1a; 1.雙指針法 算法核心思路 判斷快樂數的關鍵挑戰是如何檢測是否進入無限循環。這里使用了快慢指針法&#xff08;Floyd 循環檢測算法&#xff09;&#xff0c;這是一種高效檢測循環的技巧&#…

智慧社區構建——2

1.實現Token校驗## Token校驗URLjson GET /checkToken 參數json HttpServletRequest request 返回json {"msg": "操作成功","code": 200,"status": "ok" }{"msg": "操作成功","code": 200,&q…

K-Means聚類:當數據沒有標簽時,如何讓計算機自動“物以類聚”?

K-Means聚類&#xff1a;當數據沒有標簽時&#xff0c;如何讓計算機自動“物以類聚”&#xff1f;&#x1f44b; 大家好&#xff0c;我是小瑞瑞&#xff01;歡迎回到我的專欄&#xff01; 在我們之前的旅程中&#xff0c;解決的問題大多都有一個明確的“目標”&#xff0c;比如…

萬事皆可用 GeeLark AI

在今年4月&#xff0c;GeeLark AI 全面接入 DeepSeek AI 大模型&#xff0c;你可以在獨立窗口中便捷地使用 GeeLark AI。除了幫助你編寫文案等基礎內容&#xff0c;在使用 GeeLark 過程中&#xff0c;如果遇到問題&#xff0c;也可以通過詢問 GeeLark AI&#xff0c;及時獲取幫…