provider.md 3.9 KB
Newer Older
D
DCloud_LXH 已提交
1
<!-- UTSAPIJSON.getProvider.name -->
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

<!-- UTSAPIJSON.getProvider.description -->

uni-app的api,统一了多平台的差异。但在app平台,有的功能可以由很多SDK来支撑。比如
- 支付:有支付宝支持、微信支付、iap支付
- 定位:有系统定位、腾讯定位、高德定位

不同的SDK,本身的api是完全不同的,甚至同一个SDK的Android和iOS的API也不一样。

uni-app 通过 provider 机制来统一不同的SDK,屏蔽他们的差异。同一个功能的不同的SDK,都被称为该功能的 provider,即供应商。

比如对于支付模块,有 支付宝 和 微信 这2个 provider 可用。

由于这些[模块和SDK](../collocation/manifest-modules.md)在打包时是可选的,那么在运行时可以通过 `uni.getProvider`,来获取到本App包中包含的provider清单。

注意我们要把SDK和App的概念区分清楚。对于支付的2个provider,支付宝和微信,它们也有各自的主App。

本API `uni.getProvider`,只是获取开发者的App包中的provider清单。但本API不负责判断这些provider的主App是否安装在同一台手机上。

微信比较特殊,如果没有微信App,微信支付无法完成。其他SDK无此限制。

所以微信支付SDK,自身提供了获取微信主App是否安装的API,那么这个API也被封装到了本API返回的对象里。

<!-- UTSAPIJSON.getProvider.compatibility -->

<!-- UTSAPIJSON.getProvider.param -->

<!-- UTSAPIJSON.getProvider.returnValue -->

zhaofengliang920817's avatar
zhaofengliang920817 已提交
31 32 33 34 35 36 37 38 39 40 41
::: warning uni.getProvider 返回顺序说明:
1. 目前标准基座中注册的 provider 返回顺序如下:
    支付: 微信支付、支付宝;
    定位/地图: 系统定位、腾讯定位

2. 相同 service 下,其他的自注册 provider, 返回顺序在官方 provider 之后;

3. 自注册的 provider 无法保障顺序, 请不要依赖自注册 provider 的顺序;
:::


42 43 44 45
<!-- UTSAPIJSON.getProvider.tutorial -->

<!-- UTSAPIJSON.getProvider.example -->

M
mahaifeng 已提交
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
## uni.getProviderSync(options) @getProviderSync

<!-- UTSAPIJSON.getProviderSync.description -->

<!-- UTSAPIJSON.getProviderSync.compatibility -->

<!-- UTSAPIJSON.getProviderSync.param -->

<!-- UTSAPIJSON.getProviderSync.returnValue -->

<!-- UTSAPIJSON.getProviderSync.example -->

<!-- UTSAPIJSON.getProviderSync.tutorial -->

## uni.getProviderObjectById(options) @getProviderObjectById

<!-- UTSAPIJSON.getProviderObjectById.description -->

<!-- UTSAPIJSON.getProviderObjectById.compatibility -->

<!-- UTSAPIJSON.getProviderObjectById.param -->

<!-- UTSAPIJSON.getProviderObjectById.returnValue -->

<!-- UTSAPIJSON.getProviderObjectById.example -->

<!-- UTSAPIJSON.getProviderObjectById.tutorial -->

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
74 75
### UniProvider说明

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
76
支付Provider:[UniPaymentAlipayProvider](https://doc.dcloud.net.cn/uni-app-x/api/request-payment.html#paymentalipayprovider),[UniPaymentWxpayProvider](https://doc.dcloud.net.cn/uni-app-x/api/request-payment.html#paymentwxpayprovider)
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
77

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
78
定位Provider:[UniLocationSystemProvider](https://doc.dcloud.net.cn/uni-app-x/api/get-location.html#locationsystemprovider),[UniLocationTencentProvider](https://doc.dcloud.net.cn/uni-app-x/api/get-location.html#locationtencentprovider)
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
79

80 81 82 83 84 85 86 87
<!-- UTSAPIJSON.getProviderObject.example -->

<!-- UTSAPIJSON.getProviderObject.tutorial -->

<!-- UTSAPIJSON.provider.example -->

## 自定义provider

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
88
[自定义支付provider](request-payment.md#customprovider)
89

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
90
[自定义定位provider](get-location.md#customprovider)
91 92 93 94


### 注意点

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
95 96 97
- 标准基座android需要在manifest.json中配置才能获取到对应的provider,ios不需要,自定义基座都需要配置。

- 自注册的provider无法保障顺序,请不要依赖自注册provider的顺序。
98

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
99 100
- provider 获取规则:

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
101
  1,如果自定义的service 与 provider 配置与内置的一样,优先采用自定义的。
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
102

WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
103
  2,如果自定义的service下存在多个相同的provider ,编译器会报错。
WOSHIMAHAIFENG's avatar
WOSHIMAHAIFENG 已提交
104

105 106 107 108

<!-- UTSAPIJSON.general_type.name -->

<!-- UTSAPIJSON.general_type.param -->