Skip to content
烈梦 edited this page Sep 20, 2019 · 14 revisions

mango-matrix接入文档 v2.0.3

原则上本文中所有未折叠的接口都需要接入

1. 初始化

  • 与我方申请获取域名 host 、RSA加密公钥 rsaPublicKey和公钥IDrsaPublicKeyId

  • 在项目代码中添加初始化代码:

    function init(host: string, rsaPublicKey: string, rsaPublicKeyId: string, gameVersion: string): void;

    确保 matrix.init 在其它方法前被调用。

2. 用户相关

  • 数据类型定义:

    用户:

    type USER_DATA_TYPE = {
        id: number,
        nickname: string,
        avatar: string,
        gender: null,               // “男” , “女” 或 null 表示未知,
        country: string,
        province: string,
        city: string,
        language: string,
        register_time: number,
        phone: string,              // 未知时为null
        email: string,              // 未知时为null
        birthday: number,           // unix时间戳表示生日 未知时为null
    }
    跳转单元:
    type NAVIGATE_BOX_ITEM_TYPE = {
        id: string;
        pic: string;
        icon: string;
        name: string;
        appId: string;
        query: string;
        path: string;
        extraData: any;
        envVersion: string;
    };
    用户ip相关数据:(基于ip的定位信息)
    type USER_IP_INFO_TYPE = {
        ip: string;
        country: string;
        province: string;
        city: string;
        county: string;
        isp: string;
        zone_code: number;
        longitude: number;
        latitude: number;
    };
    用户分享数据:
    type USER_GAME_DATA_SHARE_TYPE = {
        time_count: number,                 // 成功分享次数(在微信封分享之后,该项已无意义)
        time_count_today: number,           // 今日成功分享次数(在微信封分享之后,该项已无意义)
        invite_count: number,               // 已邀请好友数
        invite_count_today: number,         // 今日已邀请好友数
    }
    用户排行榜数据:
    type USER_GAME_DATA_RANK_TYPE = {
        week_ranking: string,               // "1(该项为字符串,可能存在非数字字符)"
        week_score: string,                 // 本周最高分
        ranking: string,                    // 总排名 (如:"未上榜")
        max_score: string,                  // 历史最高分
        week_friends_ranking: string,       // 本周好友榜排名,若游戏未开启好友榜功能则为null
        friends_ranking: string,            // 好友榜总排名,若游戏未开启好友榜功能则为null
    }
    用户游戏数据:
    type USER_GAME_DATA_TYPE<T> = {
        id: string,                         // 与user_data中的id相同
        share: USER_GAME_DATA_SHARE_TYPE,
        rank: USER_GAME_DATA_RANK_TYPE,
        extra: T,
    }

    其中 extra 为开发者自定义的游戏数据,用来存储开发者定义的用户在游戏中的数据,相当于存档功能,该存档只有用户自己可见。

  • 用户登录 matrix.login(需要在代码可以运行后立即调用,以保证对于用户流失点统计的准确性。本SDK大部分接口也是必须在login完成后才能使用):

    function login<T, G>(): Promise<{
        server_time: number;
        sid: string;
        user_data: USER_DATA_TYPE;
        user_game_data: USER_GAME_DATA_TYPE<T>;
        game_config: G;
        navigate: NAVIGATE_BOX_ITEM_TYPE;
        navigate_list: Array<NAVIGATE_BOX_ITEM_TYPE>;
        box_layout: {
            highlight: Array<NAVIGATE_BOX_ITEM_TYPE>;
            category: Array<{
                "name": string;
                "icon": string;
                "list": Array<NAVIGATE_BOX_ITEM_TYPE>;
            }>;
        };
        platform_data: WMP_PLATFORM_DATA;
        ip_info: USER_IP_INFO_TYPE;
    }>
  • 用户授权 matrix.onAuth:

    (返回值格式与matrix.login相同)
    function onAuth<T, G>(info: WMP_INFO): Promise<{
        server_time: number;
        sid: string;
        user_data: USER_DATA_TYPE;
        user_game_data: USER_GAME_DATA_TYPE<T>;
        game_config: G;
        navigate: NAVIGATE_BOX_ITEM_TYPE;
        navigate_list: Array<NAVIGATE_BOX_ITEM_TYPE>;
        box_layout: {
            highlight: Array<NAVIGATE_BOX_ITEM_TYPE>;
            category: Array<{
                "name": string;
                "icon": string;
                "list": Array<NAVIGATE_BOX_ITEM_TYPE>;
            }>;
        };
        platform_data: WMP_PLATFORM_DATA;
        ip_info: USER_IP_INFO_TYPE;
    }>;
  • 获取UserInfo matrix.getUserInfo:

    function getUserInfo<T, G>(): Promise<{
        server_time: number;
        sid: string;
        user_data: USER_DATA_TYPE;
        user_game_data: USER_GAME_DATA_TYPE<T>;
        game_config: G;
        platform_data: WMP_PLATFORM_DATA;
    }>;
  • 获取用户数据 matrix.getUserData:

    function getUserData<T>(): Promise<{
        user_data: USER_DATA_TYPE;
        user_game_data: USER_GAME_DATA_TYPE<T>;
    }>;
  • 获取游戏配置 matrix.getGameConfig (可区分游戏版本配置不同的值,需要事先与后台约定。该方法虽然未登录的情况下也可以调用,但未登录时获取的值可能与登录之后存在区别):

    function getGameConfig<G>(): Promise<{
        game_config: G;
        navigate: NAVIGATE_BOX_ITEM_TYPE;
        navigate_list: Array<NAVIGATE_BOX_ITEM_TYPE>;
        box_layout: {
            highlight: Array<NAVIGATE_BOX_ITEM_TYPE>;
            category:Array<{
                "name": string;
                "icon": string;
                "list": Array<NAVIGATE_BOX_ITEM_TYPE>;
            }>;
        };
        ip_info: USER_IP_INFO_TYPE;
    }>;
    提交分数 extra.submitScore(用来维护排行榜功能):
    function submitScore<T>(score: number): Promise<{
        user_game_data: USER_GAME_DATA_TYPE<T>;
        new_record: boolean;
        new_weekly_record: boolean;
    }>;
    提交extra extra.submitExtra(提交存档与分数):

    extra操作方式的具体文档:传送门

    function submitExtra<T>(extra: T, returnUserGameData: number, score?: number | null): Promise<{
        user_game_data: USER_GAME_DATA_TYPE<T>;
        new_record: boolean;
        new_weekly_record: boolean;
    }>;
    获取世界排行周榜 matrix.getWoldWeekRank:
    function getWoldWeekRank(): Promise<{
        my_ranking: string;
        my_score: string;
        list: Array<{
            id: number;
            name: string;
            score: string;
            avatar: string;
        }>;
    }>;
    获取世界排行总榜 matrix.getWoldAllRank:
    function getWoldAllRank(): Promise<{
        my_ranking: string;
        my_score: string;
        list: Array<{
            id: number;
            name: string;
            score: string;
            avatar: string;
        }>;
    }>;
    获取所有邀请的用户 matrix.getAllShareUsers:

    每个邀请用户的config项,相当于一个只有当前用户可见的,绑定在被邀请用户对象上的存档,可以用来维护类似于“每个邀请用户可以领xx钻石类似的功能”

    function getAllShareUsers<T>(): Promise<{
        invite_count: number;
        invite_count_today: number;
        users: Array<{
            id: number;
            avatar: string;
            config: T;
        }>;
        today_login: null;
    }>;
    获取某个邀请用户的信息 matrix.getShareUserInfo:
    function getShareUserInfo<T>(userId: number): Promise<{
        id: number;
        avatar: string;
        config: T;
    }>;
    更新某个邀请用户的config matrix.updateShareUserInfo:
    function updateShareUserInfo<T>(userId: number, config: T): Promise<{
        config: T;
    }>;

3. 分享相关

  • 获取指定键名对应的文案 matrix.getShareDoc:
    shareQuery字段返回值类型修改字符串,字符串格式为key1=value1&key2=value2,可以直接作为小游戏转发APIwx.shareAppMessage()query参数。
    需要注意的是,由于接管微信右上角分享那里不能通过这种方式获取文案。 所以,getShareDoc提供一个参数isPrepare,默认值是false,当传入true的时候依然能够获取分享文案,但这个分享的请求就不作为统计项了。这个可以用来在游戏启动时初始化获取文案,为用户的右上角分享做准备。除了右上角分享之外,都是需要在拉起分享的前一刻通过SDK获取文案与图片

    function getShareDoc(docKey: string, isPrepare: boolean = false): Promise<{
        button_name: string;
        id: string | null;
        title: string;
        image: string;
        shareQuery: string;
    }>;

4. 数据统计

  • 游戏启动 matrix.BuriedPoint.onGameStart:

    onGameStart(): Promise<{
        'page_stay_object_legal': boolean;
        'ad.banner_object_legal': boolean;
        'ad.video_array_legal': boolean;
        'event_array_legal': boolean;
    }>
  • 游戏被唤醒 matrix.BuriedPoint.onGameAwake:

    onGameAwaka(): Promise<{
        'page_stay_object_legal': boolean;
        'ad.banner_object_legal': boolean;
        'ad.video_array_legal': boolean;
        'event_array_legal': boolean;
    }>
  • 游戏进入后台 matrix.BuriedPoint.onGameSleep:

    onGameSleep(): Promise<{
        'page_stay_object_legal': boolean;
        'ad.banner_object_legal': boolean;
        'ad.video_array_legal': boolean;
        'event_array_legal': boolean;
    }>
  • 进入某个场景 matrix.BuriedPoint.onEnterScene(sceneName需要与后台实现商定,若某场景前端没有事先定义,则传'DEFAULT'):

    onEnterScene(sceneName: string): void;
  • 离开某个场景 matrix.BuriedPoint.onLeaveScene(sceneName需要与后台实现商定):

    onLeaveScene(sceneName: string): void;
  • Banner 广告请求 matrix.BuriedPoint.onAdBannerRequest

    onAdBannerRequest(sceneName: string, result: boolean)
  • Banner 广告展示 matrix.BuriedPoint.onAdBannerShow

    onAdBannerShow(sceneName: string): void
  • 视频广告请求 matrix.BuriedPoint.onAdVideoRequest

    onAdVideoRequest(sceneName: string, result: boolean): void
  • 视频广告被关闭 matrix.BuriedPoint.onAdVideoClose:

    onAdVideoClose(scene: string, isEnd: boolean): void;
  • 插屏广告请求 matrix.BuriedPoint.onAdInterstitialRequest

    onAdInterstitialRequest(sceneName: string, result: boolean)
  • 插屏广告展示 matrix.BuriedPoint.onAdInterstitialShow

    onAdInterstitialShow(sceneName: string): void
  • 某个自定义的事件触发 matrix.BuriedPoint.onEventTrigger(evnetName事件名、par1事件参数1、par2事件参数2,……):

    onEventTrigger(evnetName: string, par1?: string, par2?: string, 
                    par3?: string, par4?: string,
                    par5?: string, extra?: any): void;
  • 游戏盒子某个游戏被点击 matrix.BuriedPoint.onNavigateBoxItemClick(使用SDK获取的游戏抽屉中的项被点击时上报):

    onNavigateBoxItemClick(id: string): Promise<NetworkResponse>;
  • 游戏盒子确认跳转某个消息 matrix.BuriedPoint.onNavigateBoxItemConfirm(使用SDK获取的游戏抽屉中的项被确认跳转时上报):

    onNavigateBoxItemConfirm(id: string): Promise<NetworkResponse>;

Example:

matrix.login().then(() => { 
    matrix.BuriedPoint.onGameStart(); 
});
matrix.BuriedPoint.onEnterScene("loading");

// 加载完成进入主页就:
matrix.BuriedPoint.onLeaveScene("loading");
matrix.BuriedPoint.onEnterScene("main");