159 lines
6.2 KiB
Plaintext
159 lines
6.2 KiB
Plaintext
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<string, Array<(res: any) => 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);
|
|
}
|
|
}
|