diff --git a/packages/uni-api/src/index.ts b/packages/uni-api/src/index.ts index ffc4ff3a88ec87e9e6d6c159d04c415acb9cdde4..e4e1b3c5d07e1a7a57d8129b14f906ca5966c89b 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 cdaffed1a50a6e2dc8170771c5362143482c7848..95525783409fa233b56acc955db9c88f2fdacdc7 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 0000000000000000000000000000000000000000..4f2bc9ee4f04e3b94c312c0bc7e2d5e2545c3b0b --- /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 +)