WxInit.ts 6.26 KB
import WxApi from './WxApi';
import WxSystem from './WxSystem';
import WxLaunch from './WxLaunch';
import { __LOG__, GAMEDATA } from '../base/SDKConst';
import DataService from '../service/DataService';
import SDKUtils from '../utils/SDKUtils';
import SDKEventCenter from '../base/SDKEventCenter';
import { SDKEventEnum } from '../base/SDKEventEnum';
import { NetworkType, DOT_SHARE_TYPE } from '../base/SDKEnum';
import DateUtils from '../utils/DateUtils';
import LogService from '../service/LogService';

export default class WxInit {
    private onlineTime: number;

    private constructor() {
        this.onlineTime = DateUtils.nowTime;
        wx.onShow(this.onShow.bind(this));
        wx.onHide(this.onHide.bind(this));
        wx.onNetworkStatusChange(this.onNetworkStatusChange.bind(this));
    }

    init() {
        let { platform } = WxSystem.I.SystemData;
        let launchData = WxLaunch.I.LaunchData;
        console.log("启动信息", launchData);
        let { query, scene, referrerInfo } = launchData;
        let {
            invite_type,
            channelId,
            channel_id,
            td_channelid,
            channel,
            share_id,
            share_key,
            user_invite_uid,
            weixinadinfo,
            account_id,
            service_id,
            shareMessageToFriendScene,
            // 抖音投放相关信息
            clue_token,
            ad_id,
            creative_id,
            advertister_id,
            request_id
            // 抖音投放相关信息 end
        } = query;

        let fromChannel = channelId || channel_id || channel || td_channelid;
        // 设置微信转化跟踪:第一项为来源广告的广告id,替换来源渠道id
        if (weixinadinfo) {//!fromChannel && 
            let infoArr = weixinadinfo.split('.');
            if (infoArr && infoArr.length)
                fromChannel = infoArr[0];
        }
        // 设置抖音投放转化跟踪
        if (ad_id) {
            fromChannel = ad_id;
        }

        //定向分享统计
        if (shareMessageToFriendScene && shareMessageToFriendScene >= 0 && shareMessageToFriendScene <= 50) {
            share_key = GAMEDATA.shareMessageToFriend.sharekey;
            share_id = GAMEDATA.shareMessageToFriend.share_id;
        }

        __LOG__ && console.warn(`====> PCSDK wxinit query user_invite_uid:${user_invite_uid}; fromChannel:${fromChannel}; channelId:${fromChannel}; scene:${scene}; share_id:${share_id}; share_key:${share_key};`);

        // 设置sdk 数据的信息
        DataService.I
            .setScene(scene)
            .setReferrerInfo(referrerInfo || {})
            .setShareId(share_id)
            .setPlatform(platform)
            .setShareKey(share_key)
            .setChannelId(fromChannel)
            .setQueryChannelId(fromChannel || GAMEDATA.channel_id)
            .setInviteType(invite_type)
            .setQueryUserInviteUid(user_invite_uid || 0)
            .setQueryExtData({ account_id, service_id })
            .setSystemId()
            .setLaunchSource()
            .setClueToken(clue_token)
            .setCreativeId(creative_id)
            .setAdvertisterId(advertister_id)
            .setRequestId(request_id)
        //clue_token=clue_token123&creative_id=creative_id213&ad_id=ad_id9999&request_id=request_id456&advertister_id=advertister_id9876
        // 设置网络类型
        WxApi.I.getNetworkType()
            .then((ret: _NetworkTypeSuccessObject) => this.setNetworkType(ret))
            .catch((err: _NetworkTypeSuccessObject) => this.setNetworkType(err));

        // 从会话过来,且没有渠道id,打点
        // let shareScenes = [SceneCode.WX_SHARE_FRIEND, SceneCode.WX_SHARE_GROUP, SceneCode.WX_SHARE_TICKET];
        // if (!fromChannel && shareScenes.indexOf(scene) >= 0) {
        //     LogService.I.dot(SDKDotType.Share);
        // }
    }

    private onShow(opts: any) {
        console.log("onshow_opts", opts)
        let nowTime = DateUtils.nowTime;
        let { scene, shareTicket } = opts;
        this.onlineTime = nowTime;
        // 设置sdk 数据的信息
        DataService.I
            .setScene(scene)
            .setLaunchTime(nowTime)
            .setLaunchSource();

        if (opts && opts.query) {
            let { share_key, share_id, invite_type, user_invite_uid } = opts.query;
            // DebugUtils.I.dynamic('====> PCSDK onShow 参数:', JSON.stringify(opts));
            // DebugUtils.I.dynamic(`====> PCSDK onShow scene:${scene}; share_id:${share_id}; share_key:${share_key};`);
            !SDKUtils.isUndefined(share_id) && DataService.I.setShareId(share_id);
            !SDKUtils.isUndefined(share_key) && DataService.I.setShareKey(share_key);
            !SDKUtils.isUndefined(invite_type) && DataService.I.setInviteType(invite_type);
            !SDKUtils.isUndefined(shareTicket) && DataService.I.setShareTicket(shareTicket);
            !SDKUtils.isUndefined(user_invite_uid) && DataService.I.setQueryUserInviteUid(user_invite_uid);
            if (share_id && share_key) {
                LogService.I.share(share_key, share_id, DOT_SHARE_TYPE.click);
            }
        }

        // 抛出onShow事件
        SDKEventCenter.I.emit(SDKEventEnum.APP_SHOW, opts);
    }

    private onHide() {
        // 清除banner定时器
        // Platform.I.banner && Platform.I.banner.clear();

        SDKEventCenter.I.emit(SDKEventEnum.APP_HIDE);
        // 曝光同步
        LogService.I.bannerExposure();
        // // 资源变更同步
        // LogService.I.syncLogRes();
        // // 关卡同步
        // LogService.I.syncLogLevel();
        // 同步logout:在线时长同步
        // console.error("this.onlineTime", this.onlineTime)
        if (this.onlineTime) {
            LogService.I.logOut(DateUtils.nowTime - this.onlineTime);
            this.onlineTime = 0;
        }
    }

    private onNetworkStatusChange(res: { isConnected: boolean; networkType: NetworkType }) {
        console.warn('网络变化了:', res);
        this.setNetworkType(res);
    }

    private setNetworkType(res: any) {
        res && res.networkType && DataService.I.setNetworkType(res.networkType as NetworkType);
    }

    private static instance: WxInit;
    static get I(): WxInit {
        return this.instance || (this.instance = new WxInit);
    }
}