122 lines
4.1 KiB
Plaintext
122 lines
4.1 KiB
Plaintext
import { TIMPushManager, TIMPushListener, TIMPushMessage, TIMPushResult } from '@tencentcloud/timpush';
|
|
import {
|
|
DisablePostNotificationInForeground,
|
|
RegisterPush,
|
|
SetRegistrationID,
|
|
GetRegistrationID
|
|
AddPushListener,
|
|
GetNotificationExtInfo,
|
|
CreateNotificationChannel,
|
|
UnRegisterPush,
|
|
RemovePushListener,
|
|
} from '../interface.uts'
|
|
|
|
const Push = TIMPushManager.getInstance();
|
|
const LOG_PREFIX = 'Push |';
|
|
|
|
export enum EVENT {
|
|
MESSAGE_RECEIVED = 'message_received',
|
|
MESSAGE_REVOKED = 'message_revoked',
|
|
NOTIFICATION_CLICKED = 'notification_clicked'
|
|
}
|
|
|
|
function setRunningPlatform(): void {
|
|
console.log(LOG_PREFIX, 'setRunningPlatform');
|
|
const param = {
|
|
"runningPlatform": 2
|
|
};
|
|
Push.callExperimentalAPI('setPushConfig', JSON.stringify(param)).then((res: TIMPushResult) => {
|
|
console.log(LOG_PREFIX, 'setRunningPlatform ok.', res);
|
|
}).catch((error: TIMPushResult) => {
|
|
console.log(LOG_PREFIX, `setRunningPlatform fail. code: ${error.code}, desc: ${error?.message || ''}`);
|
|
})
|
|
);
|
|
}
|
|
|
|
let disableNotification = false;
|
|
export const disablePostNotificationInForeground: DisablePostNotificationInForeground = function (disable: boolean): void {
|
|
console.log(LOG_PREFIX, 'disablePostNotificationInForeground', disable);
|
|
disableNotification = disable;
|
|
Push.disablePostNotificationInForeground(disableNotification);
|
|
}
|
|
|
|
export const registerPush: RegisterPush = function (SDKAppID: number, appKey: string, onSuccess: (data: string) => void, onError?: (errCode: number, errMsg: string) => void): void {
|
|
setRunningPlatform();
|
|
const context: Context = getContext();
|
|
Push.registerPush(context, SDKAppID, appKey).then((res: TIMPushResult) => {
|
|
onSuccess?.(JSON.stringify(res?.data) || '');
|
|
disablePostNotificationInForeground(disableNotification);
|
|
}).catch((error: TIMPushResult) => {
|
|
onError?.(error.code, error?.message || '');
|
|
})
|
|
}
|
|
|
|
export const setRegistrationID:SetRegistrationID = function (registrationID: string, onSuccess: () => void): void {
|
|
Push.setRegistrationID(registrationID).then((res: TIMPushResult) => {
|
|
console.info('setRegistrationID ok', res);
|
|
onSuccess?.();
|
|
});
|
|
}
|
|
|
|
export const getRegistrationID: GetRegistrationID = function (onSuccess: (registrationID: string) => void): void {
|
|
Push.getRegistrationID().then((res: TIMPushResult) => {
|
|
onSuccess?.(JSON.stringify(res));
|
|
});
|
|
}
|
|
|
|
export const unRegisterPush: UnRegisterPush = function (onSuccess: () => void, onError?: (errCode: number, errMsg: string) => void): void {
|
|
Push.unRegisterPush().then(() => {
|
|
onSuccess?.();
|
|
}).catch((error: TIMPushResult) => {
|
|
onError?.(error.code, error?.message || '');
|
|
})
|
|
}
|
|
|
|
export const createNotificationChannel: CreateNotificationChannel = function (options: any, onSuccess: (extInfo: string) => void): void {
|
|
// 空实现
|
|
}
|
|
|
|
export const getNotificationExtInfo: GetNotificationExtInfo = function (onSuccess: (extInfo: string) => void): void {
|
|
Push.callExperimentalAPI('getNotificationExtInfo', {}).then((res: TIMPushResult) => {
|
|
onSuccess?.(JSON.stringify(res.data));
|
|
})
|
|
}
|
|
|
|
const listenerMap = new Map<string, Array<(res: any) => void>>();
|
|
const pushListener: TIMPushListener = {
|
|
onNotificationClicked: (ext: string) => {
|
|
listenerMap.get(EVENT.NOTIFICATION_CLICKED)?.forEach(item => {
|
|
item({ data: ext });
|
|
});
|
|
},
|
|
onRevokePushMessage: (messageID: string) => {
|
|
listenerMap.get(EVENT.MESSAGE_REVOKED)?.forEach(item => {
|
|
item({ data: messageID });
|
|
});
|
|
},
|
|
onMessageReceived: (message: TIMPushMessage) => {
|
|
listenerMap.get(EVENT.MESSAGE_RECEIVED)?.forEach(item => {
|
|
item({ data: message });
|
|
});
|
|
},
|
|
};
|
|
|
|
export const addPushListener: AddPushListener = function (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 const removePushListener:RemovePushListener = function (eventName: string, listener?: (res: any) => void): void {
|
|
listenerMap.delete(eventName);
|
|
if(listenerMap.size === 0) {
|
|
Push.removePushListener(pushListener);
|
|
}
|
|
}
|