34 行
1013 B
TypeScript
34 行
1013 B
TypeScript
|
|
import { NativeModules, NativeEventEmitter, Platform } from 'react-native'
|
||
|
|
|
||
|
|
interface XuqmPushModuleInterface {
|
||
|
|
detectVendor: () => Promise<string>
|
||
|
|
registerPush: () => Promise<boolean>
|
||
|
|
}
|
||
|
|
|
||
|
|
const _native = NativeModules.XuqmPushModule as XuqmPushModuleInterface | undefined
|
||
|
|
const _eventEmitter = _native ? new NativeEventEmitter(_native as any) : null
|
||
|
|
|
||
|
|
export function isNativePushAvailable(): boolean {
|
||
|
|
return !!_native
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function detectVendorNative(): Promise<string> {
|
||
|
|
if (!_native?.detectVendor) return Platform.OS === 'ios' ? 'APNS' : 'FCM'
|
||
|
|
return _native.detectVendor()
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function registerPushNative(): Promise<void> {
|
||
|
|
if (!_native?.registerPush) return
|
||
|
|
await _native.registerPush()
|
||
|
|
}
|
||
|
|
|
||
|
|
export function addPushTokenListener(
|
||
|
|
callback: (event: { token: string; vendor: string }) => void,
|
||
|
|
): () => void {
|
||
|
|
if (!_eventEmitter) {
|
||
|
|
return () => {}
|
||
|
|
}
|
||
|
|
const subscription = _eventEmitter.addListener('XuqmPushToken', callback)
|
||
|
|
return () => subscription.remove()
|
||
|
|
}
|