更新记录

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
支持平台:AndroidiOS,适用于 uni-app xuni-app(经典版) 双端(UTS 插件双端通用)
基于官方原生 SDK:

  • Android:mt-auth-sdk-release.aarutssdk/app-android/libs/
  • iOS:MTOauth.xcframeworkutssdk/app-ios/Frameworks/

将美团官方授权 SDK 封装为 UTS 插件,向页面暴露 初始化、授权登录、Token 交换/刷新、用户信息获取、调试日志开关 共 8 个接口,Android / iOS 一套代码调用

所有敏感参数(appIdappSecret、API URL 等)均由调用方动态传入,插件本身不硬编码任何凭证。

安装到 uni-app x 请按第 1、2 节操作;安装到 uni-app(经典版)请直接看第 1 节 + 第 7 节(目录与 manifest 配置相同,仅调用语法不同)。


1. 快速接入

1.1 安装插件

将本插件目录(即 uni_modules/meituan-union/,含 package.jsonutssdk/)整体复制到 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.jsonapp-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,授权结果会自动回调到 loginsuccess/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 / getUserInfosuccess 回调参数类型为 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.xcframeworkMinimumOSVersion);
  • 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(相同)

loginsuccess 回调在两端都是 { code, state, ticket, ticketJson } 形状,直接点语法读取即可; 仅 HTTP 接口(exchangeToken/refreshToken/getUserInfo)的结果类型在两端读取方式不同,如上表所示。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android: INTERNET、ACCESS_NETWORK_STATE;iOS: 无特殊权限(需配置 Associated Domains 与 LSApplicationQueriesSchemes)

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据,所有敏感参数(appId、appSecret、API URL 等)均由调用方动态传入

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议