QUrs RN 嵌入式问卷 API

API 兼容性:
QRN:v6.3.0
iOS: 80011315 Android:60001569

QUrs 业务获取问卷信息、展示和提交问卷相关 API

引入

import { QUrs } from 'qunar-react-native';

API

QUrs.getUrs(params: object, callback: function): void

请求当前页面可展示的 urs 问卷数据

请求参数
params = {
    bizName: string, //业务名字,eg:'hotel'
    from: string, //请求来源,默认是'client'
    pageId: string, // 页面ID,eg:qrn$h_home_rn/GHotelList
    traceId: string, //
    extMap: {
        uniqueId: 'sanya_35127' // 可以为空,如果希望按照其就行频控, 则需要.可由业务线扩展
    }
};
返回数据格式,成功失败根据 bstatus 进行判断,QUrs 的所有返回值都是这种格式,只有请求 urs 有 data 节点数据返回。
{
    "bstatus":{
        "code" : 0,//非0状态为失败状态,比如-1缺少参数、服务器错误、-2 网络链接失败、-3 未知错误等
        "des": "成功",
    },
    "data": {
        "code": 0,//业务code状态
        "msg": "成功",
        "data": [
            {
                "taskId": "1000003",
                "bizName": "hotel",
                "bizUseTime": {
                    "showAfterSecond": "10"
                },
                "showNow": false,
                "position": 4,
                "pageId": "qrn$h_home_rn/HotelDetail",
                "questionnaire": {
                    "id": 1000000,
                    "name": "验证",
                    "questions": [
                        {
                            "id": 1000001,
                            "label": "酒店满意度",
                            "options": [
                                {
                                    "label": "比较认同",
                                    "gif": "https://qimgs.qunarzz.com/wpf_newmpic_001/c85856ba9d8855a7eab529822773faec.png",
                                    "value": 1
                                },
                                {
                                    "label": "不确定",
                                    "gif": "https://qimgs.qunarzz.com/wpf_newmpic_001/284eefb4f2ad46c1e2cdbd462ddee739.png",
                                    "value": 2
                                },
                                {
                                    "label": "完全不认同",
                                    "gif": "https://qimgs.qunarzz.com/wpf_newmpic_001/43f79bbe76208fc065e9ab5d1ac6d7f4.png",
                                    "value": 3
                                }
                            ]
                        }
                    ]
                }
            },
            {
                "taskId": "1000005",
                "bizName": "hotel2",
                "bizUseTime": {
                    "showAfterSecond": "10"
                },
                "showNow": false,
                "position": 5,
                "pageId": "qrn$h_home_rn/HotelDetail",
                "questionnaire": {
                    "id": 1000000,
                    "name": "验证",
                    "questions": [
                        {
                            "id": 1000001,
                            "label": "酒店满意度",
                            "options": [
                                {
                                    "label": "比较认同",
                                    "gif": "https://qimgs.qunarzz.com/wpf_newmpic_001/c85856ba9d8855a7eab529822773faec.png",
                                    "value": 1
                                },
                                {
                                    "label": "不确定",
                                    "gif": "https://qimgs.qunarzz.com/wpf_newmpic_001/284eefb4f2ad46c1e2cdbd462ddee739.png",
                                    "value": 2
                                },
                                {
                                    "label": "完全不认同",
                                    "gif": "https://qimgs.qunarzz.com/wpf_newmpic_001/43f79bbe76208fc065e9ab5d1ac6d7f4.png",
                                    "value": 3
                                }
                            ]
                        }
                    ]
                }
            }
        ]
    }
}

QUrs.onUrsShow(params: object, callback: function): void

当 URS 展示时调用,框架进行埋点和上传,后端收到请求后进行记录做频次控制

请求参数

注意:①通过getUrs 获取的实时问卷是后端做频控,只需要传taskId和pageId;
②通过getBizUrsData或者resourceId资源位 获取的问卷数据需要额外传 surveyId 和 resourceId ,本地也做频控

params = {
    taskId: string,
    pageId: string,
    surveyId: string,
    resourceId: string
};
返回数据格式,成功失败根据 bstatus.code 和 data.code 进行判断(网关状态和业务状态)
{
 "bstatus":{
        "code" : 0,//非0状态为失败状态,比如-1缺少参数、服务器错误、-2 网络链接失败、-3 未知错误等
        "des": "success",
    },
    "data":{
        "code": 0,//业务服务状态
        "msg":"success"
    }
}

QUrs.onUrsSubmit(params: object, callback: function): void

保存问卷答案 API,当用户选中答案进行提交的时候调用。

请求参数
params = {
    questionnaireId: number,
    pageId: string,
    answerData: [
        {
            id: 1234, // 问题id
            value: ['', '', '好'] // value的size是问题对应的选项数量, 被选择的选项填充label, 没被选择的选项为空串
        }
    ]
};
返回数据格式,成功失败根据 bstatus.code 和 data.code 进行判断(网关状态和业务状态)
{
    "bstatus":{
        "code" : 0,//非0状态为失败状态,比如-1缺少参数、服务器错误、-2 网络链接失败、-3 未知错误等
        "des": "success",
    },
    "data":{
        "code": 0,//业务服务状态
        "msg":"success"
    }
}

QUrs.tryShowFloatUrs(params: object, callback: function): void

展示 URS 问卷浮层入口

请求参数
params = {
    taskId: string
};
返回数据格式,成功失败根据 bstatus.code 和 data.code 进行判断(网关状态和业务状态)
{
    "bstatus":{
        "code" : 0,//非0状态为失败状态,比如-1缺少参数、服务器错误、-2 网络链接失败、-3 未知错误等
        "des": "success",
    }
}

QUrs.canShowFloatUrsView(params: object, callback: function): void

设置当前页面是否展示 urs 浮层 View(生效版本:Android:60001578,IOS:80011320)

请求参数
params = {
    canShow: boolean
};
返回数据格式,成功失败根据 bstatus.code
{
    "bstatus":{
        "code" : 0,//非0状态为失败状态,比如-1缺少参数、服务器错误、-2 网络链接失败、-3 未知错误等
        "des": "success",
    }
}

QUrs.closeFloatUrs(params: object, callback: function): void

关闭 URS 问卷浮层入口(生效版本:Android:60001578,IOS:80011320)

请求参数,暂时没有使用,方便后期拓展使用
params = {};
返回数据格式
{
    "bstatus":{
        "code" : 0,//非0状态为失败状态,比如-1缺少参数、服务器错误、-2 网络链接失败、-3 未知错误等
        "des": "success",
    }
}

使用说明

import { QUrs } from 'qunar-react-native';

// 获取问卷信息
QUrs.getUrs(
    {
        bizName: 'hotel',
        from: 'client',
        pageId: 'flight_pay_success_new', // 页面Id
        traceId: '',
        extMap: {
            uniqueId: 'sanya_35127' // 可以为空,如果希望按照其就行频控, 则需要.可由业务线扩展
        }
    },
    (result) => {
        this.setState({
            ursResult: JSON.stringify(result)
        });
    }
);

QUrs.addUrsShowListener(resourceId: string, callback: function): void

添加 Urs 问卷展示监听 注意: 该方法在 iOS: 80011321, Android:60001580 版本后才支持

参数说明
  • resourceId 资源位 ID, 需要通过后端配置传入
  • callback 回调函数, 当 Urs 问卷展示时触发

使用说明

import { QUrs } from 'qunar-react-native';

// 获取问卷信息
QUrs.addUrsShowListener('id-123-456', (result) => {
    console.log(result);
});

QUrs.removeUrsShowListener(resourceId: string): void

移除 Urs 问卷展示监听 注意: 该方法在 iOS: 80011321, Android:60001580 版本后才支持

参数说明
  • resourceId 资源位 ID, 需要通过后端配置传入

使用说明

import { QUrs } from 'qunar-react-native';

// 获取问卷信息
QUrs.removeUrsShowListener('id-123-456');

收到该广播后展示问卷需要调用上边的 QUrs.onUrsShow (增加 surveyId 和 resourceId )让框架记录频控日志

在原来的参数基础上,增加 surveyId 和 resourceId (类型②,通过getBizUrsData获取的问卷数据,或者resourceId资源位展示的时候需要传)

params = {
    taskId: string,
    pageId: string,
    surveyId: string,
    resourceId: string
};

用户点击问卷跳转链接拼接方法

//1、拼接问卷url,在url基础上拼接上pageId、问卷ID、taskId、资源位Id
const hyUrl = `${showingUrs.url}?pageId=${encodeURIComponent(pageID)}&surveyId=${encodeURIComponent(
    showingUrs.surveyId
)}&taskId=${encodeURIComponent(taskId)}&resourceId=${encodeURIComponent(resourceId)}`;
//2、拼接hyScheme链接,增加半透明属性
const scheme = `${DeviceInfo.scheme}://hy?url=${encodeURIComponent(
    hyUrl
)}&animate=none&type=all-transparent&showLoading=false`;

QUrs.addUrsCloseListener(resourceId: string, callback: function): void

添加 Urs 问卷关闭监听 注意: 该方法在 iOS: 80011321, Android:60001580 版本后才支持

参数说明
  • resourceId 资源位 ID, 需要通过后端配置传入
  • callback 回调函数, 当 Urs 问卷关闭时触发

使用说明

import { QUrs } from 'qunar-react-native';

// 获取问卷信息
QUrs.addUrsCloseListener('id-123-456', (result) => {
    console.log(result);
});

QUrs.removeUrsCloseListener(resourceId: string): void

移除 Urs 问卷关闭监听 注意: 该方法在 iOS: 80011321, Android:60001580 版本后才支持

参数说明
  • resourceId 资源位 ID, 需要通过后端配置传入

使用说明

import { QUrs } from 'qunar-react-native';

// 获取问卷信息
QUrs.removeUrsCloseListener('id-123-456');

QUrs.addUrsSubmitListener(resourceId: string, callback: function): void

添加 Urs 问卷提交监听 注意: 该方法在 iOS: 80011321, Android:60001580 版本后才支持

参数说明
  • resourceId 资源位 ID, 需要通过后端配置传入
  • callback 回调函数, 当 Urs 问卷提交时触发

使用说明

import { QUrs } from 'qunar-react-native';

// 获取问卷信息
QUrs.addUrsSubmitListener('id-123-456', (result) => {
    console.log(result);
});

QUrs.removeUrsSubmitListener(resourceId: string): void

移除 Urs 问卷提交监听 注意: 该方法在 iOS: 80011321, Android:60001580 版本后才支持

参数说明
  • resourceId 资源位 ID, 需要通过后端配置传入

使用说明

import { QUrs } from 'qunar-react-native';

// 获取问卷信息
QUrs.removeUrsSubmitListener('id-123-456');

用户点击问卷跳转链接拼接方法

//1、拼接问卷url,在url基础上拼接上pageId、问卷ID、taskId、资源位Id
const hyUrl = `${showingUrs.url}?pageId=${encodeURIComponent(pageID)}&surveyId=${encodeURIComponent(
    showingUrs.surveyId
)}&taskId=${encodeURIComponent(taskId)}&resourceId=${encodeURIComponent(resourceId)}`;
//2、拼接hyScheme链接,增加半透明属性
const scheme = `${DeviceInfo.scheme}://hy?url=${encodeURIComponent(
    hyUrl
)}&animate=none&type=all-transparent&showLoading=false`;

QUrs.getBizUrsData(params: object, callback: function): void

通过 taskId 获取问卷信息 注意: 该方法在 iOS: 80011321, Android:60001580 版本后才支持

参数说明
params = {
    taskId: string,
    pageId: string
};

使用说明

import { QUrs } from 'qunar-react-native';

// 获取问卷信息
QUrs.getBizUrsData(
    {
        taskId: '83',
        pageId: 'qrn$h_home_rn/HotelDetail'
    },
    (result) => {
        alert(JSON.stringify(result));
    }
);
返回数据格式,成功失败根据 bstatus 进行判断,QUrs 的所有返回值都是这种格式,只有请求 urs 有 data 节点数据返回。
{
    "bstatus":{
        "code" : 0,//非0状态为失败状态,比如-1缺少参数、服务器错误、-2 网络链接失败、-3 未知错误等
        "des": "成功",
    },
    "data": {
        "taskId": "292",
        "taskRateControl": [
            {
                "days": 1,
                "maxCount": 1
            },
            {
                "days": 7,
                "maxCount": 7
            }
        ],
        "controlByBiz": [//取这个节点下的数据展示
            {
                "showPages": {
                    "qrn$h_home_rn/HotelList": 20
                },
                "surveys": [
                    {
                        "title": "点击此处,参加有奖调研!",
                        "content": "轻松领取200积分!",
                        "url": "https://m.flight.qunar.com/shark/active/7731bcd442dcb4d6234e4624b714e807",
                        "iconUrl": "https://s.qunarzz.com/f_cms/2023/1693279637454_668967712.webp",
                        "surveyId": "235"
                    }
                ]
            }
        ],
        "adr": false,
        "minVid": 0,
        "extraInfo": ""
    }
}