GTPush.uts 4.2 KB
Newer Older
taohebin@dcloud.io's avatar
taohebin@dcloud.io 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
import Context from "android.content.Context";
import GTPlugin from "com.getui.sdk.GTPlugin";
import IPushAction from "com.getui.sdk.IPushAction";
import GTCmdMessage from "com.igexin.sdk.message.GTCmdMessage";
import GTNotificationMessage from "com.igexin.sdk.message.GTNotificationMessage";
import GTTransmitMessage from "com.igexin.sdk.message.GTTransmitMessage";
import IUserLoggerInterface from "com.igexin.sdk.IUserLoggerInterface";

export function gtInit(context : Context) : void {
	GTPlugin.initialize(context);
}

export function getClientId(context : Context) : string {
	return GTPlugin.getClientId(context);
}

export function setPushAction(action : UserPushAction) : void {
	GTPlugin.setPushAction(action);
}


export type GTPushActionOptions = {

	onReceiveServicePid ?: (res : number) => void

	/**
	 * 接收clientId(cid)
	 */
	onReceiveClientId ?: (res : string) => void

	/**
	* 此方法用于接收和处理透传消息。透传消息个推只传递数据,不做任何处理,客户端接收到透传消息后需要自己去做后续动作处理,如通知栏展示、弹框等。
	* 如果开发者在客户端将透传消息创建了通知栏展示,建议将展示和点击回执上报给个推。
	*/
	onReceiveMessageData ?: (res : string) => void

	/**
	 * cid 离线上线通知
	 */
	onReceiveOnlineState ?: (res : boolean) => void

	/**
	 * 各种事件处理回执
	 */
	onReceiveCommandResult ?: (res : GTCmdMessage) => void

	/**
	 * 通知点击,只有个推通道下发的通知会回调此方法
	 */
	onNotificationMessageClicked ?: (res : string) => void

	/**
	 * 通知到达,只有个推通道下发的通知会回调此方法
	 */
	onNotificationMessageArrived ?: (res : GTNotificationMessage) => void
}



export class UserPushAction implements IPushAction {

	constructor(
		private options : GTPushActionOptions) {
	}

	override onReceiveServicePid(ctx : Context, pid : Int) {
		this.options.onReceiveServicePid?.(pid)
	}

	/**
	 * 接收clientId(cid)
	 */
	override onReceiveClientId(ctx : Context, cid : string) {
		this.options.onReceiveClientId?.(cid)
	}

	/**
	* 此方法用于接收和处理透传消息。透传消息个推只传递数据,不做任何处理,客户端接收到透传消息后需要自己去做后续动作处理,如通知栏展示、弹框等。
	* 如果开发者在客户端将透传消息创建了通知栏展示,建议将展示和点击回执上报给个推。
	* 
	* class GTTransmitMessage {
	* 	private String taskId;
	* 	private String messageId;
	* 	private String payloadId;
	* 	private byte[] payload;
	* }
	*/
	override onReceiveMessageData(ctx : Context, message : GTTransmitMessage) {
		this.options.onReceiveMessageData?.(new String(message.getPayload()))
	}

	/**
	 * cid 离线/上线通知
	 */
	override onReceiveOnlineState(ctx : Context, state : boolean) {
		this.options.onReceiveOnlineState?.(state)
	}

	/**
	 * 各种事件处理回执
	 */
	override onReceiveCommandResult(ctx : Context, message : GTCmdMessage) {
		this.options.onReceiveCommandResult?.(message)
	}

	/**
	 * 通知点击,只有个推通道下发的通知会回调此方法
	 */
	override onNotificationMessageClicked(ctx : Context, message : GTNotificationMessage) {
		const params = {
			"title": message.getTitle(),
			"content": message.getContent()
		};
		this.options.onNotificationMessageClicked?.(JSON.stringify(params))
	}

	/**
	 * 通知到达,只有个推通道下发的通知会回调此方法
	 */
	override onNotificationMessageArrived(ctx : Context, message : GTNotificationMessage) {
		this.options.onNotificationMessageArrived?.(message)
	}
}


class UserLoggerInterface implements IUserLoggerInterface {
	constructor(private callback : (log : string) => void) {
	}

	override log(s : string) {
		this.callback?.(s)
	}
}

/**
 * 个推推送sdk调试日志信息
 * setDebugLogger 接口仅限调试的时候使用,切勿发布到线上版本,重复调用仅以第一次为准。
 */
export function setDebugLogger(callback : (log : string) => void) {
	const ctx = UTSAndroid.getAppContext();
	if (ctx != null) {
		GTPlugin.setDebugLogger(ctx, new UserLoggerInterface(callback))
	}
}