更新记录
1.0.2(2026-08-12) 下载此版本
修复iOS下的构建异常问题
1.0.1(2026-08-12) 下载此版本
新增插件
平台兼容性
uni-app(4.87)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.1 | √ | 1.0.1 | × | × | √ | √ | 11.0 | 1.0.1 | √ | 1.0.1 | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.0)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| × | × | 11.0 | 1.0.1 | √ | 1.0.1 | × | × |
meituan-union 美团授权登录 UTS 插件(uni-app x / uni-app 经典版)
插件 ID:
meituan-union(@/uni_modules/meituan-union)
支持平台:Android 与 iOS,适用于 uni-app x 与 uni-app(经典版) 双端(UTS 插件双端通用)
基于官方原生 SDK:
- Android:
mt-auth-sdk-release.aar(utssdk/app-android/libs/)- iOS:
MTOauth.xcframework(utssdk/app-ios/Frameworks/)
将美团官方授权 SDK 封装为 UTS 插件,向页面暴露 初始化、授权登录、Token 交换/刷新、用户信息获取、调试日志开关 共 8 个接口,Android / iOS 一套代码调用。
所有敏感参数(appId、appSecret、API URL 等)均由调用方动态传入,插件本身不硬编码任何凭证。
安装到 uni-app x 请按第 1、2 节操作;安装到 uni-app(经典版)请直接看第 1 节 + 第 7 节(目录与 manifest 配置相同,仅调用语法不同)。
1. 快速接入
1.1 安装插件
将本插件目录(即 uni_modules/meituan-union/,含 package.json 与 utssdk/)整体复制到 uni-app x 项目根目录 下,与项目已有的 uni_modules/ 目录合并:
<uni-app-x-project>/
├── pages/...
├── uni_modules/
│ └── meituan-union/
│ ├── package.json
│ └── utssdk/
│ ├── interface.uts
│ └── app-android/
│ ├── index.uts # 插件入口(自动编译)
│ ├── MeituanUnionNative.kt # 原生实现(自动编译)
│ ├── MtAuthEntryActivity.java
│ ├── config.json # 依赖声明
│ └── libs/mt-auth-sdk-release.aar
└── ...
1.2 配置宿主 AndroidManifest.xml(必做)
美团授权结果不通过 onActivityResult 返回,而是由美团 App 通过深链调起宿主中的回调 Activity {包名}.mtauth.MtAuthEntryActivity(类名由美团侧按宿主包名硬编码拼接),因此必须在宿主中注册回调 Activity,并声明美团 App 的包可见性。
uni-app x 的 manifest.json 没有权限配置入口,请在 uni-app x 项目根目录创建自定义 AndroidManifest.xml(HBuilderX 云打包时自动合并;离线打包时需手动合并进原生工程的 AndroidManifest.xml):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="你的应用包名">
<!-- 美团 SDK 必需权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Android 11+ 包可见性:允许查询美团 App(com.sankuai.meituan) 是否安装/版本 -->
<queries>
<package android:name="com.sankuai.meituan" />
</queries>
<application>
<!-- 插件提供的通用回调类(由 alias 转发) -->
<activity
android:name="io.dcloud.uniplugin.mtauth.MtAuthEntryActivity"
android:exported="false"
android:taskAffinity="你的应用包名" />
<!-- 美团固定路径别名:.mtauth 按 package 解析为 {包名}.mtauth.MtAuthEntryActivity -->
<activity-alias
android:name=".mtauth.MtAuthEntryActivity"
android:targetActivity="io.dcloud.uniplugin.mtauth.MtAuthEntryActivity"
android:exported="true"
android:launchMode="singleTask">
<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="mtauth你的美团AppId"
android:host="mtauth"
android:path="/callback" />
</intent-filter>
</activity-alias>
</application>
</manifest>
说明:
android:scheme="mtauth" + 你的美团 AppId(client_id),用于端内 H5 授权回调;原生 App 授权回调不依赖 scheme;.mtauth.MtAuthEntryActivity为相对名,按自定义 manifest 的package解析为{包名}.mtauth.MtAuthEntryActivity(美团 SDK 硬编码路径);queries缺失时isMeituanInstalled()在 Android 11+ 恒返回 false;- 云打包(HBuilderX 3.6.0+)自动合并项目根目录的自定义
AndroidManifest.xml;离线打包需手动合并。
1.3 iOS 平台接入
iOS 端基于 MTOauth.xcframework(已内置在 utssdk/app-ios/Frameworks/)。授权结果通过 Universal Link 回跳宿主 App,无需 URL Scheme(兼容端内 H5 授权场景)。
1.3.1 配置 manifest.json(iOS 必做)
在 manifest.json 的 app-plus.distribute.ios.capabilities 中配置:
{
"entitlements": {
// 美团授权回跳的 Universal Link(Apple Associated Domains)
"com.apple.developer.associated-domains": [ "applinks:你的域名" ]
},
"plists": {
// 用于 isMeituanInstalled / isMeituanSupportNativeOAuth 检测
"LSApplicationQueriesSchemes": [ "imeituan", "imeituan-oauth" ]
}
}
- 必须在苹果开发者后台的 Associated Domains 中为同一域名配置
applinks(需 HTTPS);callbackUniversalLink填写你在美团开放平台登记的 Universal Link,例如https://h5.example.com/meituan/callback;- 端内 H5 授权回跳使用 URL Scheme,格式为
mtauth + 美团 AppId(如mtauth376dad3856984da09ace138246e526b7),需在plists.CFBundleURLTypes声明。
1.3.2 初始化(iOS 需额外传回调链接)
initSDK({
appId: '你的美团开放平台 AppId',
callbackUniversalLink: 'https://h5.example.com/meituan/callback', // iOS 必填,Android 忽略
// redirectURI: 'https://h5.example.com/meituan/redirect' // 可选,缺省用 callbackUniversalLink
})
插件内部通过
UTSiOSHookProxy自动监听 Universal Link / URL Scheme 唤起并调用MtOAuthSdk.handleOpenURL,授权结果会自动回调到login的success/fail,无需宿主额外写 AppDelegate 代码。
2. 页面调用示例
import { initSDK, setLogEnabled, login, exchangeToken, getUserInfo,
isMeituanInstalled } from '@/uni_modules/meituan-union'
// 1. 初始化(建议在 App.uvue 的 onLaunch 中最先调用)
initSDK({
appId: '你的美团开放平台 AppId',
callbackUniversalLink: 'https://h5.example.com/meituan/callback' // iOS 必填,Android 忽略
})
// 2. 打开调试日志(仅排障时使用,生产环境关闭)
setLogEnabled({ enabled: true })
// 3. 检查美团安装状态(同步)
console.log('美团已安装:', isMeituanInstalled())
// 4. 发起授权登录
login({
scope: 'base',
state: '随机UUID(防CSRF)',
authType: 'pkce_ticket', // 可选:'basic' | 'pkce_ticket'
confirmPageStyle: 'fullscreen', // 可选:'half' | 'fullscreen'
success: (res) => {
console.log('授权码:', res.code, 'state:', res.state)
// res.ticket / res.ticketJson 仅在 pkce_ticket 模式下返回
exchangeToken({
url: 'https://openapi.meituan.com/oauth/token',
code: res.code,
appId: '你的 AppId',
appSecret: '你的 AppSecret', // 生产环境建议由服务端中转
success: (token) => {
console.log('access_token:', token.getString('access_token'))
},
fail: (err) => console.error('Token 交换失败', err.errCode, err.errMsg)
})
},
fail: (err) => {
console.error('登录失败', err.errCode, err.errMsg)
}
})
异步接口统一遵循 UTS 标准回调约定
success/fail/complete(可只传需要的)。
3. API 列表
| # | 方法 | 类型 | 说明 |
|---|---|---|---|
| 1 | initSDK(options: InitOptions) |
同步 | 初始化美团授权 SDK(必须先调用) |
| 2 | setLogEnabled(options) |
同步 | 打开/关闭调试日志(含 SDK 内部日志) |
| 3 | login(options: LoginOptions) |
异步 | 发起授权登录(调起美团 App / 引导安装) |
| 4 | exchangeToken(options: ExchangeTokenOptions) |
异步 | auth code 换取 access_token(子线程 HTTP) |
| 5 | refreshToken(options: RefreshTokenOptions) |
异步 | 刷新 access_token(子线程 HTTP) |
| 6 | getUserInfo(options: UserInfoOptions) |
异步 | 获取美团用户信息(子线程 HTTP) |
| 7 | isMeituanInstalled(): boolean |
同步 | 检查美团 App 是否安装 |
| 8 | isMeituanSupportNativeOAuth(): boolean |
同步 | 检查美团 App 是否支持原生授权 |
关于初始化函数命名:
- iOS Swift 中
init是保留字,UTS 编译export function init会报错,因此 iOS 端只能使用initSDK;- 为保证跨端统一,Android / iOS 新代码统一调用
initSDK;- Android 端同时保留了旧函数
init(与已对接的旧调用完全兼容),旧代码可继续用init({ ... }),不受影响。
各方法参数/返回类型见 utssdk/interface.uts。字段含义与错误码与 uni-app 原生插件(uni.requireNativePlugin('meituan-union'))一致,可参考主工程 README 的第 3 节(uniplugin_meituan_union/README.md)。
3.1 HTTP 接口返回
exchangeToken / refreshToken / getUserInfo 的 success 回调参数类型为 ApiResult(即 UTSJSONObject),包含美团 API 返回的全部字段,使用方式:
success: (res) => {
const token = res.getString('access_token')
const expires = res.getNumber('expires_in')
}
3.2 错误对象 MtError
fail: (err) => {
console.log(err.errCode, err.errMsg)
}
errCode 参考:-2 打开美团 App 失败、-3 参数不完整(未 init/参数为空)、-5 无效回调、-6 网络失败、-100 用户取消、-101 环境异常。
4. 目录结构
meituan-union/
├── package.json # 插件元信息(id / uni_modules.type: uts)
├── utssdk/
│ ├── interface.uts # API 类型定义(标准模式)
│ ├── app-android/
│ │ ├── index.uts # 插件入口:参数拆分 + 回调类型适配
│ │ ├── MeituanUnionNative.kt# 原生 Kotlin 实现(package uts.sdk.modules.meituanUnion)
│ │ ├── MtAuthEntryActivity.java # 美团授权深链回调 Activity(通用类,不含包名)
│ │ ├── config.json # minSdkVersion + dependencies(fastjson)
│ │ └── libs/
│ │ └── mt-auth-sdk-release.aar # 美团官方授权 SDK(自动编入 App)
│ └── app-ios/
│ ├── index.uts # 插件入口:参数拆分 + 回调适配 + UTSiOSHookProxy Hook
│ ├── MeituanUnionNative.swift # 原生 Swift 实现(SDK 封装 + MtOAuthCallback 协议 + HTTP)
│ ├── config.json # deploymentTarget + frameworks
│ ├── Info.plist # 合并到主工程(LSApplicationQueriesSchemes)
│ └── Frameworks/
│ └── MTOauth.xcframework # 美团官方 iOS 授权 SDK(自动编入 App)
5. 注意事项
minSdkVersion要求 21(Android 5.0)及以上;- iOS 端要求 iOS 9.0 及以上(
MTOauth.xcframework的MinimumOSVersion); - iOS 必须传
callbackUniversalLink(Universal Link,以https://开头),并在苹果后台配置 Associated Domains,否则login无法收到授权结果; - 生产环境请保持
setLogEnabled({enabled:false}),避免泄露授权码/ticket/appSecret; - 真机运行需使用自定义调试基座(云打包可一步到位);
- 本插件与 uni-app 原生插件
meituan-union是两套独立体系(UTS 插件 vs nativeplugins 原生插件),请勿混用。
6. uni-app(经典版)使用说明
本插件为 UTS 插件,同时支持 uni-app x 与 uni-app(经典版)。经典版接入方式如下:
6.1 前提条件
| 条件 | 要求 |
|---|---|
| HBuilderX | 3.6+(vue3 编译器)/ 3.6.8+(vue2 编译器) |
| 调试运行 | 需使用自定义调试基座(标准基座不含 UTS 插件);云打包可直接使用 |
| 目录安装 | 复制到项目根目录 uni_modules/(与 uni-app x 相同,见第 1 节) |
| manifest 配置 | Android 见第 1.2 节;iOS 见第 1.3 节(Associated Domains + LSApplicationQueriesSchemes) |
6.2 调用方式:必须用 import
UTS 插件不能用 uni.requireNativePlugin('meituan-union') 加载(那是 nativeplugins 原生插件体系的加载方式)。请使用标准 ES module 引入,路径指向插件根目录:
// App.vue 或页面 .vue 中
import { initSDK, login, exchangeToken, isMeituanInstalled } from '@/uni_modules/meituan-union'
initSDK({
appId: '你的美团开放平台 AppId',
callbackUniversalLink: 'https://h5.example.com/meituan/callback' // iOS 必填,Android 忽略
})
login({
scope: 'base',
state: '随机UUID(防CSRF)',
authType: 'pkce_ticket',
success: (res) => {
console.log('授权码:', res.code, 'state:', res.state, 'ticket:', res.ticket)
exchangeToken({
url: 'https://openapi.meituan.com/oauth/token',
code: res.code,
appId: '你的 AppId',
appSecret: '你的 AppSecret',
success: (token) => {
// 注意:经典版 JS 环境中 HTTP 结果是普通 JS 对象,用点语法读取
console.log('access_token:', token.access_token, 'refresh_token:', token.refresh_token)
},
fail: (err) => console.error('Token 交换失败', err.errCode, err.errMsg)
})
},
fail: (err) => console.error('登录失败', err.errCode, err.errMsg)
})
6.3 与 uni-app x 的差异
| 项 | uni-app x(UTS 环境) | uni-app(经典版,JS 环境) |
|---|---|---|
| 引入 | import ... from '@/uni_modules/meituan-union' |
相同 |
| 回调参数 | UTS 类型对象 | 普通 JS 对象(点语法读取字段) |
| HTTP 结果读取 | res.getString('access_token') |
res.access_token |
| 登录结果读取 | res.code / res.state |
res.code / res.state(相同) |
login的success回调在两端都是{ code, state, ticket, ticketJson }形状,直接点语法读取即可; 仅 HTTP 接口(exchangeToken/refreshToken/getUserInfo)的结果类型在两端读取方式不同,如上表所示。

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 4
赞赏 0
下载 12503432
赞赏 1941
赞赏
京公网安备:11010802035340号