mtl-js-sdk
Version:
ynf-fw-mtl-api
123 lines (111 loc) • 3.47 kB
JavaScript
;
function Plugin(options, exports = {}) {
const { platform } = options || { platform: window.mtl.platform };
/** 内部处理 */
function invokeSuccess(object, ret) {
object.success && object.success(ret);
object.complete && object.complete(ret);
}
function invokeFail(object, err) {
if (err) {
if (!err.message) {
err.message = err.msg || err.errMsg || err.errDescription;
}
if (typeof err.code == 'undefined') {
err.code = err.errCode;
}
}
object.fail && object.fail(err);
object.complete && object.complete(err);
}
function handleMessage(handlerName, data, responseCallback) {
window.MTLWebViewJavascriptBridge.handleMessage(handlerName, data, responseCallback);
}
// getNotice默认处理
function getNoticeBridage(object) {
execApiBridge('getNotice', {...object, success: function(ret) {
let notice = ret.notice;
if (typeof notice == 'string') {
notice = JSON.parse(notice);
}
invokeSuccess(object, notice);
}})
}
//设置deviceToken
function setDeviceToken(object = {}) {
execApiBridge('setDeviceToken', object)
}
//删除推送
function removePush(object = {}) {
execApiBridge('removePush', object)
}
// 获取推送消息
function getNotice(object = {}) {
if (platform === 'APIAndroid') {
mtl.getStorage({
domain:'AndroidPush',
key:'AndroidPushData',
success:function(resObj){
console.log('sss2', JSON.parse(resObj.data))
execApiBridge('getNotice', {...object, success: function(ret) {
let notice = ret.notice || [];
if (typeof notice == 'string') {
notice = JSON.parse(notice);
}
invokeSuccess(object, {notice : [JSON.parse(resObj.data), ...notice]});
}})
mtl.removeStorage({
domain:'AndroidPush',
key:'AndroidPushData'
});
},
fail:function(err) {
getNoticeBridage(object)
}
});
} else {
getNoticeBridage(object)
}
}
function receiveNotice(object = {}) {
execApiBridge('receiveNotice', {...object, success:function(ret) {
let callback = object.registerCallback;
let result = ret.result || ret.notice;
let res = typeof result.mtl_content == "string" ? JSON.parse(result.mtl_content) : result.mtl_content;
callback && handleMessage(callback, res);
}})
}
function setBadgeNumber(object = {}) {
execApiBridge('setBadgeNumber', object)
invokeSuccess(object, {});
}
// 内部方法
function execApiBridge(method, object) {
let mtlPush = window.api.require('mtlPush');
if (!mtlPush) {
invokeFail(object, {
msg: "module mtlPush not added"
});
return;
}
if (mtlPush[method]) {
mtlPush[method](object, function(ret){
if (ret && ret.status) {
invokeSuccess(object, ret)
} else {
invokeFail(object, {message:ret.message});
}
})
} else {
invokeFail(object, {
msg: "method " + method + " not found"
});
}
}
const methods = (platform === 'APIAndroid' || platform === 'APIIos')
? {setDeviceToken, removePush, getNotice, receiveNotice, setBadgeNumber} : {};
exports.module = methods;
exports.symbolPath = "push";
return exports;
}
export default Plugin;