From d189e5b3db95ef0448572e4853d2eaac2d56b08b Mon Sep 17 00:00:00 2001 From: DCloud_LXH <283700113@qq.com> Date: Fri, 25 Jun 2021 14:54:51 +0800 Subject: [PATCH] feat(App): getProvider --- packages/uni-api/src/index.ts | 2 + .../uni-app-plus/src/service/api/index.ts | 2 + .../src/service/api/plugin/getProvider.ts | 84 +++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 packages/uni-app-plus/src/service/api/plugin/getProvider.ts diff --git a/packages/uni-api/src/index.ts b/packages/uni-api/src/index.ts index ffc4ff3a8..e4e1b3c5d 100644 --- a/packages/uni-api/src/index.ts +++ b/packages/uni-api/src/index.ts @@ -75,6 +75,8 @@ export * from './protocols/ui/startPullDownRefresh' export * from './protocols/ui/stopPullDownRefresh' export * from './protocols/ui/tabBar' export * from './protocols/ui/window' + +export * from './protocols/plugin/getProvider' // helpers export { defineOnApi, diff --git a/packages/uni-app-plus/src/service/api/index.ts b/packages/uni-app-plus/src/service/api/index.ts index cdaffed1a..955257834 100644 --- a/packages/uni-app-plus/src/service/api/index.ts +++ b/packages/uni-app-plus/src/service/api/index.ts @@ -30,3 +30,5 @@ export * from './location/getLocation' export * from './ui/popup/showModal' export * from './ui/popup/showActionSheet' export * from './ui/popup/showToast' + +export * from './plugin/getProvider' diff --git a/packages/uni-app-plus/src/service/api/plugin/getProvider.ts b/packages/uni-app-plus/src/service/api/plugin/getProvider.ts new file mode 100644 index 000000000..4f2bc9ee4 --- /dev/null +++ b/packages/uni-app-plus/src/service/api/plugin/getProvider.ts @@ -0,0 +1,84 @@ +import { + defineAsyncApi, + API_GET_PROVIDER, + API_TYPE_GET_PROVIDER, + GetProviderProtocol, +} from '@dcloudio/uni-api' + +type Provider = PlusOauthAuthService['id'][] +type CallBack = (err: null | Error, provider?: Provider) => void + +const providers = { + oauth(callback: CallBack) { + plus.oauth.getServices( + (services) => { + services = services as PlusOauthAuthService[] + const provider: Provider = [] + services.forEach(({ id }) => { + provider.push(id) + }) + callback(null, provider) + }, + (err) => { + err = err as Error + callback(err) + } + ) + }, + share(callback: CallBack) { + plus.share.getServices( + (services) => { + const provider: Provider = [] + services.forEach(({ id }) => { + provider.push(id) + }) + callback(null, provider) + }, + (err) => { + callback(err) + } + ) + }, + payment(callback: CallBack) { + plus.payment.getChannels( + (services) => { + const provider: Provider = [] + services.forEach(({ id }) => { + provider.push(id) + }) + callback(null, provider) + }, + (err) => { + callback(err) + } + ) + }, + push(callback: CallBack) { + if (typeof weex !== 'undefined' || typeof plus !== 'undefined') { + callback(null, [plus.push.getClientInfo().id]) + } else { + callback(null, []) + } + }, +} + +export const getProvider = defineAsyncApi( + API_GET_PROVIDER, + ({ service }, { resolve, reject }) => { + if (providers[service]) { + providers[service]((err, provider) => { + if (err) { + reject(err.message) + } else { + resolve({ + service, + provider: provider as any[], + }) + } + }) + } else { + reject('service not found') + } + }, + GetProviderProtocol +) -- GitLab