import { UTSAndroid } from 'io.dcloud.uts'; import Context from 'android.content.Context'; // import Notification from 'android.app.Notification'; // import NotificationChannel from 'android.app.NotificationChannel'; // import NotificationManager from 'android.app.NotificationManager'; // import Uri from 'android.net.Uri'; import TIMPushManager from 'com.tencent.qcloud.tim.push.TIMPushManager'; import TIMPushConfig from 'com.tencent.qcloud.tim.push.config.TIMPushConfig'; import { PushCallbackOptions } from './push-callback-options.uts'; import { PushListenerOptions } from './push-listener-options.uts'; import PushCallback from './push-callback.uts'; import PushListener from './push-listener.uts'; const context: Context | null = UTSAndroid.getAppContext(); console.warn('Push | package.name:', context?.getPackageName()); TIMPushConfig.getInstance().setRunningPlatform(2); const Push = TIMPushManager.getInstance(); export class EVENT { static MESSAGE_RECEIVED: string = 'message_received' static MESSAGE_REVOKED: string = 'message_revoked' } export function registerPush(SDKAppID: number, appKey: string, onSuccess: (data: string) => void, onError?: (errCode: number, errMsg: string) => void): void { if (SDKAppID == 0) { onError?.(9010001, 'Invalid SDKAppID'); } else if (appKey == '') { onError?.(9010002, 'Invalid appKey'); } const pushCbOptions: PushCallbackOptions = { apiName: 'registerPush', success: (res?: any) => { // 强转下类型,避免类型推断错误 let token: string = res as string; onSuccess(token); }, fail: (errCode: number, errMsg: string) => { onError?.(errCode, errMsg); } }; // 注意!!! 这里不要写成 new PushCallback({ api, success, fail }),否则会因类型推断不一致导致编译错误 Push.registerPush(context, SDKAppID.toInt(), appKey, new PushCallback(pushCbOptions)); } export function setRegistrationID(registrationID: string, onSuccess: () => void): void { const pushCbOptions: PushCallbackOptions = { apiName: 'setRegistrationID', success: (res?: any) => { onSuccess(); }, fail: (errCode: number, errMsg: string) => { // 空实现 } }; // 注意!!! 这里不要写成 new PushCallback({ api, success, fail }),否则会因类型推断不一致导致编译错误 Push.setRegistrationID(registrationID, new PushCallback(pushCbOptions)); } export function getRegistrationID(onSuccess: (registrationID: string) => void): void { const pushCbOptions: PushCallbackOptions = { apiName: 'getRegistrationID', success: (res?: any) => { // 强转下类型,避免类型推断错误 let registrationID: string = res as string; onSuccess(registrationID); }, fail: (errCode: number, errMsg: string) => { // 空实现 } }; // 注意!!! 这里不要写成 new PushCallback({ api, success, fail }),否则会因类型推断不一致导致编译错误 Push.getRegistrationID(new PushCallback(pushCbOptions)); } export function unRegisterPush(onSuccess: () => void, onError?: (errCode: number, errMsg: string) => void): void { const pushCbOptions: PushCallbackOptions = { apiName: 'unRegisterPush', success: (res?: any) => { onSuccess(); }, fail: (errCode: number, errMsg: string) => { // 空实现 }, }; // 注意!!! 这里不要写成 new PushCallback({ api, success, fail }),否则会因类型推断不一致导致编译错误 Push.unRegisterPush(new PushCallback(pushCbOptions)); } // export const createNotificationChannels: CreateNotificationChannels = function(options: CreateNotificationChannelsOptions) { // const apiName: string = 'createNotificationChannels'; // if (options.notificationChannelList.length == 0) { // const err = new ApiFailImpl(9010003, apiName); // options.fail?.(err); // // options.complete?.(err); // } // options.notificationChannelList.forEach((item: NotificationChannelItem) => { // const { channelID = 'customChannelId', channelName = 'customChannel', channelDesc = '', channelSound = '' } = item; // const channel: NotificationChannel = new NotificationChannel(channelID, channelName, NotificationManager.IMPORTANCE_HIGH); // channel.enableLights(true); // channel.enableVibration(true); // channel.setShowBadge(true); // channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); // if(channelDesc !== '') { // channel.setDescription(channelDesc); // } // if(channelSound !== '') { // channel.setSound(Uri.parse(`android.resource://${context?.getPackageName()}/raw/${channelSound}`), null); // } // const manager: NotificationManager | null = context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager; // manager?.createNotificationChannel(channel); // }) // } export function getNotificationExtInfo(onSuccess: (extInfo: string) => void): void { const pushCbOptions: PushCallbackOptions = { apiName: 'getNotificationExtInfo', success: (res?: any) => { let ret: string = res as string; onSuccess(ret); }, fail: (errCode: number, errMsg: string) => { // 空实现 }, }; Push.callExperimentalAPI('getNotificationExtInfo', null, new PushCallback(pushCbOptions)); } const listenerMap = new Map void>>(); const pushListenerOptions: PushListenerOptions = { listener: (eventName: string, data: any) => { listenerMap.get(eventName)?.forEach(item => { item(data); }); }, }; const pushListener = new PushListener(pushListenerOptions); export function addPushListener(eventName: string, listener: (res: any) => void): void { if(listenerMap.size === 0) { Push.addPushListener(pushListener); } const listeners:Array<(res: any) => void> = [listener]; listenerMap.get(eventName)?.forEach(item => { listeners.push(item); }) listenerMap.set(eventName, listeners); } export function removePushListener(eventName: string, listener?: (res: any) => void): void { listenerMap.delete(eventName); if(listenerMap.size === 0) { Push.removePushListener(pushListener); } }