XuqmGroup-RNSDK/packages/push/src/NativePush.ts

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()
}