APP开发录音功能 upload 上传录音

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

upload 上传录音

//上传最近一次的录音
//POST(multipart/form-data 编码)方式上传最新录音文件到指定的地址
jsBridge.audioRecorder.upload({
  //必须,字符串类型,POST 方式接收录音文件的链接地址
  //如需鉴权,请将鉴权参数放在此 url 上,参数需 urlEncode 编码
  url  : "https://...",
  //可选,字符串类型,form-data 表单项名称,默认 file
  //在服务器上用类似 Request.Files["file"] 方式获取数据
  name : "file"
}, function(succ, data) {
  show({
    succ: succ,
    data: data
  });
});

/**
回调事件(需调用 setListener 监听)
event
  20 //上传进度
     data: {
       uploaded :, //数字类型,已上传字节数(byte)
       total    :  //数字类型,总字节数(byte)
     }
  21 //上传结束
     data: {
        success :, //布尔类型,是否上传成功
        message :, //字符串类型,未成功时的错误说明
        response : //字符串类型,服务器端返回的 Reponse 字符串
     }
**/

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//上传最近一次的录音
//POST(multipart/form-data 编码)方式上传最新录音文件到指定的地址
jsBridge.audioRecorder.upload({
  //必须,字符串类型,POST 方式接收录音文件的链接地址
  //如需鉴权,请将鉴权参数放在此 url 上,参数需 urlEncode 编码
  url  : "https://...",
  //可选,字符串类型,form-data 表单项名称,默认 file
  //在服务器上用类似 Request.Files["file"] 方式获取数据
  name : "file"
}, function(succ, data) {
  show({
    succ: succ,
    data: data
  });
});

/**
回调事件(需调用 setListener 监听)
event
  20 //上传进度
     data: {
       uploaded :, //数字类型,已上传字节数(byte)
       total    :  //数字类型,总字节数(byte)
     }
  21 //上传结束
     data: {
        success :, //布尔类型,是否上传成功
        message :, //字符串类型,未成功时的错误说明
        response : //字符串类型,服务器端返回的 Reponse 字符串
     }
**/

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//上传最近一次的录音
//POST(multipart/form-data 编码)方式上传最新录音文件到指定的地址
jsBridge.audioRecorder.upload({
  //必须,字符串类型,POST 方式接收录音文件的链接地址
  //如需鉴权,请将鉴权参数放在此 url 上,参数需 urlEncode 编码
  url  : "https://...",
  //可选,字符串类型,form-data 表单项名称,默认 file
  //在服务器上用类似 Request.Files["file"] 方式获取数据
  name : "file"
}, function(succ, data) {
  show({
    succ: succ,
    data: data
  });
});

/**
回调事件(需调用 setListener 监听)
event
  20 //上传进度
     data: {
       uploaded :, //数字类型,已上传字节数(byte)
       total    :  //数字类型,总字节数(byte)
     }
  21 //上传结束
     data: {
        success :, //布尔类型,是否上传成功
        message :, //字符串类型,未成功时的错误说明
        response : //字符串类型,服务器端返回的 Reponse 字符串
     }
**/

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音 read 读取录音文件内容

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

read 读取录音文件内容

//读取录音文件内容,以 Base64 编码格式返回,需自己转换为二进制数据
jsBridge.audioRecorder.read(function(contentAsBase64) {
  show({
    contentAsBase64: contentAsBase64
  });
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//读取录音文件内容,以 Base64 编码格式返回,需自己转换为二进制数据
jsBridge.audioRecorder.read(function(contentAsBase64) {
  show({
    contentAsBase64: contentAsBase64
  });
});

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//读取录音文件内容,以 Base64 编码格式返回,需自己转换为二进制数据
jsBridge.audioRecorder.read(function(contentAsBase64) {
  show({
    contentAsBase64: contentAsBase64
  });
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音功能 remove 删除录音

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

remove 删除录音

//删除最近一次的录音
jsBridge.audioRecorder.remove(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//删除最近一次的录音
jsBridge.audioRecorder.remove(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//删除最近一次的录音
jsBridge.audioRecorder.remove(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音功能 duration 获取录音时长(秒)

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

duration 获取录音时长(秒)

//需在 play 之后,stop 之前才能获取录音长度。
jsBridge.audioRecorder.duration(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//需在 play 之后,stop 之前才能获取录音长度。
jsBridge.audioRecorder.duration(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//需在 play 之后,stop 之前才能获取录音长度。
jsBridge.audioRecorder.duration(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音功能 stop 停止播放

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

stop 停止播放

jsBridge.audioRecorder.stop(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.stop(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.stop(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音 resume 恢复播放

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

resume 恢复播放

jsBridge.audioRecorder.resume(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.resume(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.resume(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音功能 pause 暂停播放

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

pause 暂停播放

jsBridge.audioRecorder.pause(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.pause(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.pause(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音功能 play 回放录音

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

play 回放录音

//回放最近一次的录音
jsBridge.audioRecorder.play(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//回放最近一次的录音
jsBridge.audioRecorder.play(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//回放最近一次的录音
jsBridge.audioRecorder.play(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音功能 HTML Form 表单录音

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

HTML Form 表单录音

• 给 input file 标签添加 accept=”audio/*” 属性。

• form 表单每次录制时长限30分钟以内。

<input type="file" accept="audio/*" name="file" />

APP开发录音 stopRecord 停止录音

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

stopRecord 停止录音

jsBridge.audioRecorder.stopRecord(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

/**
data 返回实际录音时长
  {
    duration //数字类型,实际录音时长
  }
**/

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.stopRecord(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

/**
data 返回实际录音时长
  {
    duration //数字类型,实际录音时长
  }
**/

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.stopRecord(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

/**
data 返回实际录音时长
  {
    duration //数字类型,实际录音时长
  }
**/

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音功能 startRecord 开始录音 – voice

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

startRecord 开始录音 – voice

jsBridge.audioRecorder.startRecord({
  maxDuration: 60,
  hiddenUI   : false,
  source     : "voice"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.startRecord({
  maxDuration: 60,
  hiddenUI   : false,
  source     : "voice"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});
}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.startRecord({
  maxDuration: 60,
  hiddenUI   : false,
  source     : "voice"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP录音功能开发 startRecord 开始录音

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

startRecord 开始录音

• 本接口会自动请求录音权限,未授权则无法录音;

• 你可先调用 jsBridge.requestPermissions([“Microphone”]) 请求授权或判断是否已始终拒绝;

• 如果没有权限可调用 jsBridge.appSettings() 跳转到APP设置界面提示用户开启权限;

• Android 录音为 MPEG4 格式,AAC 编码;

//APP 端始终只保留一个录音文件,执行 startRecord 将覆盖已有录音。
jsBridge.audioRecorder.startRecord({
  //必须,数字类型,最大录音时长(秒)
  maxDuration: 60,
  //可选,布尔类型,是否隐藏 APP 自带的 UI(录音话筒),默认 false
  //设为 true 可以不用APP自带的UI,自己设计 HTML 录音界面即可
  hiddenUI   : false,
  //可选,字符串类型,音源,默认 mic 麦克风
  //mic   麦克风
  //voice 语音通信(仅用于语音通话,不然可能引发闪退)
  source     : "mic"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});

/**
回调事件(需调用 setListener 监听)
event
  10 //录音进度,每秒回调一次
     data: {
       duration   :, //数字类型,已录音长度(秒)
       maxDuration:  //数字类型,最大可录音长度
     }
  11 //达到设置的最大录音长度(maxDuration),停止录音
     data: {
        duration    //数字类型,实际录音长度(秒)
     }
  12 //声波振幅,每200毫秒回调一次,可用于制作跳动的波形图
     data: {
        amplitude    //数字类型,声波振幅
     }
  13 //已停止录音
     data: {
        duration    //数字类型,实际录音长度(秒)
        isCanceled  //布尔类型,是否已取消录音(如取消,APP会删除录音,不可回放,不可上传),只有 isCanceled 为 false 时录音才可用。
     }
**/

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//APP 端始终只保留一个录音文件,执行 startRecord 将覆盖已有录音。
jsBridge.audioRecorder.startRecord({
  //必须,数字类型,最大录音时长(秒)
  maxDuration: 60,
  //可选,布尔类型,是否隐藏 APP 自带的 UI(录音话筒),默认 false
  //设为 true 可以不用APP自带的UI,自己设计 HTML 录音界面即可
  hiddenUI   : false,
  //可选,字符串类型,音源,默认 mic 麦克风
  //mic   麦克风
  //voice 语音通信(仅用于语音通话,不然可能引发闪退)
  source     : "mic"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});

/**
回调事件(需调用 setListener 监听)
event
  10 //录音进度,每秒回调一次
     data: {
       duration   :, //数字类型,已录音长度(秒)
       maxDuration:  //数字类型,最大可录音长度
     }
  11 //达到设置的最大录音长度(maxDuration),停止录音
     data: {
        duration    //数字类型,实际录音长度(秒)
     }
  12 //声波振幅,每200毫秒回调一次,可用于制作跳动的波形图
     data: {
        amplitude    //数字类型,声波振幅
     }
  13 //已停止录音
     data: {
        duration    //数字类型,实际录音长度(秒)
        isCanceled  //布尔类型,是否已取消录音(如取消,APP会删除录音,不可回放,不可上传),只有 isCanceled 为 false 时录音才可用。
     }
**/
}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//APP 端始终只保留一个录音文件,执行 startRecord 将覆盖已有录音。
jsBridge.audioRecorder.startRecord({
  //必须,数字类型,最大录音时长(秒)
  maxDuration: 60,
  //可选,布尔类型,是否隐藏 APP 自带的 UI(录音话筒),默认 false
  //设为 true 可以不用APP自带的UI,自己设计 HTML 录音界面即可
  hiddenUI   : false,
  //可选,字符串类型,音源,默认 mic 麦克风
  //mic   麦克风
  //voice 语音通信(仅用于语音通话,不然可能引发闪退)
  source     : "mic"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});

/**
回调事件(需调用 setListener 监听)
event
  10 //录音进度,每秒回调一次
     data: {
       duration   :, //数字类型,已录音长度(秒)
       maxDuration:  //数字类型,最大可录音长度
     }
  11 //达到设置的最大录音长度(maxDuration),停止录音
     data: {
        duration    //数字类型,实际录音长度(秒)
     }
  12 //声波振幅,每200毫秒回调一次,可用于制作跳动的波形图
     data: {
        amplitude    //数字类型,声波振幅
     }
  13 //已停止录音
     data: {
        duration    //数字类型,实际录音长度(秒)
        isCanceled  //布尔类型,是否已取消录音(如取消,APP会删除录音,不可回放,不可上传),只有 isCanceled 为 false 时录音才可用。
     }
**/

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP录音开发 removeListener 移除监听器

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

removeListener 移除监听器

//移除监听器,不会再收到回调通知
//在需要时可重新调用 setListener
jsBridge.audioRecorder.removeListener();

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//移除监听器,不会再收到回调通知
//在需要时可重新调用 setListener
jsBridge.audioRecorder.removeListener();

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
//移除监听器,不会再收到回调通知
//在需要时可重新调用 setListener
jsBridge.audioRecorder.removeListener();

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP录音开发 setListener 设置监听器

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

• 如需接口调用事件,请设置此监听器;

• 回调参数 event及data 请详见具体接口注释;

jsBridge.audioRecorder.setListener(function(event, data) {
  show({
    event: event,
    data : data
  });
});


//请拉到页面底部查看回调数据信息
$('html,body').animate({ scrollTop: $('#view').offset().top }, 500);

/**
回调参数说明:
event - 事件代码,数字类型
data  - 事件数据,JSON 对象

event编号及data数据结构 请详见具体接口注释

**/

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.setListener(function(event, data) {
  show({
    event: event,
    data : data
  });
});


//请拉到页面底部查看回调数据信息
$('html,body').animate({ scrollTop: $('#view').offset().top }, 500);

/**
回调参数说明:
event - 事件代码,数字类型
data  - 事件数据,JSON 对象

event编号及data数据结构 请详见具体接口注释

**/

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.setListener(function(event, data) {
  show({
    event: event,
    data : data
  });
});


//请拉到页面底部查看回调数据信息
$('html,body').animate({ scrollTop: $('#view').offset().top }, 500);

/**
回调参数说明:
event - 事件代码,数字类型
data  - 事件数据,JSON 对象

event编号及data数据结构 请详见具体接口注释

**/

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

H5支付接入前准备

1.选择接入模式

商户/服务商在接入前首先要判断自己公司注册区域适用的接入模式,微信支付目前提供两种接入方式:直连模式和服务商模式。

● 直连模式:

信息、资金流:微信支付—>直连商户

直连模式,商户自行申请入驻微信支付,无需服务商协助。(商户平台申请)成为直连商户

● 服务商模式:

    —— 信息流    —— 资金流

服务商模式,商户申请成为微信支付服务商,服务商自身无法作为一个直连商户直接发起交易,其发起交易必须传入相关特约商户商户号的参数信息。(服务商平台申请)成为服务商

请结合自身实际情况来选择接入模式。

服务商模式相关说明详见:服务商模式介绍

2.参数申请

商户自行申请入驻微信支付,无服务商协助。(商户平台申请)成为直连商户

  • 1申请APPID由于微信支付的产品体系全部搭载于微信的社交体系之上,所以直连商户或服务商接入微信支付之前,都需要有一个微信社交载体,该载体对应的ID即为APPID。对于直连商户,该社交载体可以是公众号(什么是公众号),小程序(什么是小程序)或APP。如申请社交载体为公众号,请前往 公众平台申请如申请社交载体为小程序,请前往 小程序平台 申请如商户已拥有自己的APP,且希望该APP接入微信支付,请前往 开放平台申请商户可根据实际的业务需求来选择申请不同的社交载体。各类社交载体一旦申请成功后,可以登录对应平台查看账号信息以获取对应的appid。
  • 2申请mchid申请mchid和APPID的操作互不影响,可以并行操作,申请地址如下: 商户号申请平台申请成功后,会向服务商填写的联系邮箱下发通知邮件,内容包含申请成功的mchid及其登录账号密码,请妥善保存。注意:一个mchid只能对应一个结算币种,若需要使用多个币种收款,需要申请对应数量的mchid。
  • 3绑定APPID及mchidAPPID和mchid全部申请完毕后,需要建立两者之间的绑定关系。直连模式下,APPID与mchid之间的关系为多对多,即一个APPID下可以绑定多个mchid,而一个mchid也可以绑定多个APPID。
  • 完成

3.配置API key

API v3密钥主要用于平台证书解密、回调信息解密,具体使用方式可参见接口规则文档中证书和回调报文解密章节。

请根据以下步骤配置API key:

  • 1登录微信商户平台,进入【账户中心 > API安全 】目录,设置APIV3密钥。
  • 2在弹出窗口中点击“已沟通”。
  • 3输入API密钥,内容为32位字符,包括数字及大小写字母。点击获取短信验证码。
  • 4输入短信验证码,点击“确认”即设置成功。
  • 完成

4.下载并配置商户证书

商户API证书具体使用说明可参见接口规则文档中私钥和证书章节

商户可登录微信商户平台,在【账户中心】->【API安全】目录下载证书

以下为具体下载步骤:

  • 1从2018年底开始,微信支付新入驻机构及商户都将使用CA签发证书,在证书申请页面上点击“申请证书”。
  • 2在弹出窗口中点击“确定”。
  • 3在弹出窗口内点击“下载证书工具”按钮下载证书工具。
  • 4安装证书工具并打开,选择证书需要存储的路径后点击“申请证书”。
  • 5在证书工具中,将复制的商户信息粘贴并点击“下一步”。
  • 6获取请求串
  • 7生成证书串步骤1 在【商户平台】-“复制证书串”环节,点击“复制证书串”按钮后;步骤2 在【证书工具】-“复制请求串”环节,点击“下一步”按钮进入“粘贴证书串”环节;步骤3 在【证书工具】-“粘贴证书串”环节,点击“粘贴”按钮后;步骤4 点击“下一步”按钮,进入【证书工具】-“生成证书”环节
  • 8在【证书工具】-“生成证书”环节,已完成申请证书流程,点击“查看证书文件夹”,查看已生成的证书文件。
  • 完成
    • 引用自微信商户平台文档

小米开放平台特殊行业资质要求

本文档介绍了特殊行业资质要求相关内容,您可在阅读文档内容后,对特殊行业资质要求有所了解。

一、资质提交入口

应用相应资质提交入口:“小米开放平台”-“应用管理页”-“发布应用或创建新应用”-“完善资料”-“上传行业资质证明”。

如有疑问,请进入问题工单系统,与我们取得联系。

二、特殊行业资质要求

由于应用种类繁多、审核规范会不定期调整,资质说明并未详尽,以后台驳回理由以及与咨询开发者支持同学为准。

根据国家相关法律法规要求,请以下类型产品提供相应的资质,具体要求如下:

图:特殊行业资质要求

承诺函通用版本docx.docx

小米开放平台应用分阶段发布操作指南

1、功能介绍

在应用发布新版本时,您可以采用分阶段发布的方式进行应用版本更新。采用分阶段发布,您可以先向一定比例的用户发布更新的版本,快速获取用户对新版本的反馈意见,验证产品功能的稳定性,降低全量发布可能出现的风险及影响范围。

(目前该能力覆盖范围仅限应用,游戏暂不支持,且该能力处于内测阶段,如需开通,请联系 zhouyanjie@xiaomi.com ,并提供开发者ID、应用名称、应用包名)。

2、操作说明

2.1 使用分阶段发布能力

前提条件:您的APP当前上架版本为全网发布时,可提交新版本并设置为分阶段发布(即分阶段发布只适用于应用版本更新环节)。

操作路径:小米开放平台 – 应用列表 – 管理 – 应用详情页 – 更新版本。

图:应用更新

2.2 创建分阶段发布版本

在“发布类型”区域下设置相关参数。

图:设置分阶段发布参数
参数说明
发布类型选择“分阶段发布”;
生效时间分阶段发布的生效周期; 
分阶段发布开始时间不得早于当前时间,结束时间必须大于开始时间,生效周期最大30天。达到生效结束时间后,分阶段发布版本将自动转全网发布。
暂停状态下,不会自动转全网发布;
到达结束时间后操作默认为到达结束时间后推送全网发布,也可选择暂停分阶段发布;
发布百分比请输入整数或小数,数值必须大于0且小于100。如果输入小数,则最多保留小数点后1位。对同一个分阶段发布版本,要求发布百分比数值逐渐变大;
分阶段发布说明填写本次分阶段发布的备注信息,如发布特性等,限500字以内。此说明不对用户或小米审核人员展示,仅展示在版本信息页面,供开发者自己参考;
图:参数说明

完善其他相关信息后,点击“提交审核”,确认版本号无误后点击“确认”。提交成功后,应用版本状态更新为“审核中”。

2.3 管理分阶段发布版本

审核期间,在应用详情页可以对分阶段发布版本查看详情、撤销审核;

审核通过后,小米商店将按设置的生效时间和发布百分比分发该版本,正式版本和分阶段发布版本将同时在架。开发者可以在应用详情页查看、更新资料和更新发布管理;

图:查看分阶段发布应用

在“发布管理”页面,可查看分阶段版本的发布状态、发布设置、发布说明等,并进行更新分阶段发布、全网发布、暂停分阶段发布、恢复分阶段发布、取消分阶段发布操作。

图:查看分阶段发布状态、发布设置、发布说明

2.3.1 暂停分阶段发布

分阶段发布生效后,点击“暂停分阶段发布”,认真阅读弹出的提示框内容后,点击“确认”,分阶段发布版本将在小米应用商店暂时下架,即发布范围内的所有用户均暂时无法在小米应用商店搜索到该版本的应用。

图:暂停分阶段发布

2.3.2 恢复分阶段发布

分阶段发布暂停期间,点击“恢复分阶段发布”按钮,在弹窗中点击“确定”,该分阶段发布将在小米应用商店恢复上架,按照设置的生效时间和发布百分比继续分发,且恢复分阶段发布的申请无需人工审核。

图:恢复分阶段发布
恢复分阶段发布参数说明
生效时间起始时间:不支持修改; 
结束时间:支持修改,您需要保证整个分阶段发布的生效周期不超过30天;
发布百分比支持修改。对于同一个分阶段发布版本,每修改一次发布范围的百分比,需大于等于上一次的百分比数值;
分阶段发布说明支持修改。对于同一个分阶段发布版本,每修改一次发布范围的百分比,建议大于上一次的百分比数值。
图:参数说明

2.3.3 更新分阶段发布

在分阶段发布审核通过但尚未达到生效时间以及在分阶段发布生效期间内,您均可以执行更新分阶段发布操作,且更新分阶段发布的申请无需人工审核。

图:更新分阶段发布
更新分阶段发布参数说明
生效时间起始时间:不支持修改;
结束时间:支持修改,您需要保证整个分阶段发布的生效周期不超过30天;
发布百分比支持修改。对于同一个分阶段发布版本,每修改一次发布范围的百分比,需大于等于上一次的百分比数值;
分阶段发布说明支持修改。对于同一个分阶段发布版本,每修改一次发布范围的百分比,建议大于上一次的百分比数值。
图:更新分阶段发布参数

2.3.4 取消分阶段发布

分阶段发布未生效和已生效期间,点击“取消分阶段”按钮,认真阅读弹出的提示框内容后,在弹窗中点击“确定”,可以取消分阶段发布,取消后,该版本将在小米应用商店下架,取消分阶段发布无需人工审核。

图:取消分阶段发布

2.3.5 分阶段发布转全网发布

  • 自动转全网发布:如您之前在发布配置- 结束时间后操作选择的是“推全网发布”则分阶段发布的生效周期结束后,将自动转全网发布版本;
  • 手动转全网发布:点击“恢复分阶段发布”或“更新分阶段发布”,“发布类型”选择“全网发布”,即可将分阶段发布版本转为全网版本。

注:分阶段发布版本转为全网版本后,帐号持有者会收到邮件通知。

2.3.6 下架分阶段发布版本

  • 取消分阶段发布后,分阶段发布版本会立即下架,无需人工审核;
  • 应用下架审核通过后,分阶段发布版本也将随之下架。

2.4 提交新版本

当APP的各版本都审核完成时,点击全量版本操作栏的“更新版本”按钮,“发布类型”选择全网发布或分阶段发布,可更新正式版本或分阶段发布版本。提交审核后,当前在架的分阶段发布版本将下架。

3、常见FAQ

1)设置的比例代表什么含义?

以设置10%为例,代表在小米应用商店内有10%的活跃用户可以看到您的新版本;

2)该包是否会影响到正常版本的分发?

使用该能力后,新包和旧包同时保持上架,新包仅分发给设置的比例所命中用户群;

3)如果使用分阶段发布的新包有问题,想上传新的包去覆盖怎么操作?

只要保证新包版本号大于上一次的包即可;

4)分阶段发布是否支持同版本更新?

暂不支持。

以上为应用分阶段发布流程内容,如您仍有问题,可进入问题工单系统,与我们取得联系。

小米开放平台应用隐私检测问题查询-“隐私合规”模块使用教程

为协助开发者在开发、运营APP的过程中,更好履行个人信息保护责任与义务,保障平台用户的合法权益,为用户和开发者提供更多更好的服务,小米应用商店新增隐私问题查询和复测功能。本文档为“隐私问题查询和复测页面”的使用教程,您可在了解文档内容后进行功能使用。

一、隐私问题查询路径

1、隐私检测弹窗提示

当开发者旗下的应用,在隐私检测过程中发现问题,我们将通过邮件、开发者站弹窗公告的方式进行提醒,告知开发者关注检测出的问题,届时开发者可通过弹窗直接跳转查看问题。如开发者旗下多个应用均检测出问题时,我们也将仅发布一个弹窗公告来提醒。

图:弹窗提示隐私政策问题

2、开发者站首页“隐私合规”入口

开发者站首页增加隐私检测入口,点击可进入隐私合规页面。在此可浏览开发者旗下在架应用的隐私检测状态,及存在的具体问题报告详情。(注:隐私合规页面中,仅对当前状态为“在架”的应用进行检测)

图:隐私政策合规入口

3、应用详情页“隐私合规”入口

同样,在各个应用的管理详情页—“应用服务”模块下,也增加了隐私问题查询入口,点击后可进入对应应用的隐私问题检测报告页。(注:部分非在架状态的应用无法检测,因此无问题报告详情)

图:隐私政策合规入口

二、隐私问题查询操作指南

1、检测情况查询

开发者进入“隐私合规”模块页面后,开发者旗下的应用将按照检测情况进行排列,不同检测状态定义如下:

1)检测情况显示“已通过”:代表该应用本次检测中,未发现问题;

2)检测情况显示“未通过”:代表该应用在本次检测中,发现存在隐私问题;

3)检测情况显示“未检测”:代表该应用目前在检测排队中,未进行检测;

4)检测情况显示“检测中”:代表开发者在“问题报告”页面,提交修改后的apk,正在复测中。

(注:因检测易受到环境差异或时间节点影响,已通过应用不代表绝对安全,未来还将不定期复测)

开发者可点击“隐私合规”模块页面上方的《隐私合规问题修改指引》,查询隐私问题的修改方法,或参照标准来进行问题的自查。

图:隐私合规问题修改指引

2、隐私问题报告查询

点击各个应用的“查看报告”入口可进入报告详情页,查看应用存在的相关问题及问题产生的详细介绍。对无法复现或定位的问题,报告详情页中将提供检测期间问题页面的截图供开发者参考,并且可以通过详情页中“查看报告”入口可以下载报告查看详细的检测问题项及其整改建议。

图:隐私问题报告查询

三、修改后的apk提交隐私复测操作指南

1、提交APK进行复测

如开发者将应用存在的隐私问题修改完成,开发者可在“问题报告详情页”中,点击右上角的“检测修改后的apk”,提交修改后的包体进行隐私合规的复测,提交复测的apk,无需修改apk的版本号。

图:提交新版安装包进行复测
图:核对安装包信息

复测apk上传后,将会对“包名、hash值、MD5”等信息进行校验,避免开发者不小心提交未修改的apk或错误的apk。(注:开发者上传未修改过的apk,或上传其他应用的apk,会进行弹窗提醒)

图:包名不一致提示
图:未修改的安装包提示

2、提交APK复测后状态查询

当开发者提交修改后的apk进行复测,问题报告详情页中的提交复测按钮将置灰,页面将暂时保持上一次的检测结果,待复测完成后,页面检测结果将更新为最新状态。(注:复测需要1~2个工作日)

图:复测后结果查询

若应用检测通过,问题详情页将显示以下状态。(注:检测通过的详情页,不提供apk复测入口)

图:复测通过显示

如您在使用过程中仍遇到其他问题,也可通过开发者站的问题工单系统模块,与我们取得联系,我们将有专人解答您的问题,感谢您的支持和理解。

小米开放平台应用商店支持 64 位架构适配

4 位 CPU 能够为您的用户提供更快、更丰富的体验。添加 64 位的应用版本不仅可以提升性能、为未来创新创造条件,还能针对仅支持 64 位架构的设备做好准备。

本指南介绍了如何确保 32 位应用为支持 64 位设备做好准备,供您随时采用。

评估您的应用

如果您的应用仅使用以 Java 编程语言或 Kotlin 编写的代码(包括所有库或 SDK),那么就表示该应用已经能支持 64 位设备。如果您的应用使用了任何原生代码,或者您不确定应用是否使用了这类代码,那么您需要评估应用并采取措施。

快速状态检查

要检查应用是否已满足 64 位要求,请将应用安装包上传至应用完善资料页的安装包信息模块处,若上传成功,证明安装包符合要求。

您的应用是否使用了原生代码?

首先需要检查您的应用是否使用了任何原生代码。 如果您的应用符合以下情况,便是使用了原生代码:

  • 使用了任何 C/C++(原生)代码。
  • 与任何第三方原生库关联。
  • 通过使用原生库的第三方应用构建程序构建而成。

应用是否包含 64 位库?

若要确定应用是否包含 64 位库,最简单的方法就是检查 APK 文件的结构。在构建时,APK 会与应用所需的所有原生库打包在一起。原生库会根据 ABI 存储在不同的文件夹中。您的应用不一定要支持所有 64 位架构,但对于支持的每种原生 32 位架构,应用都必须包含相应的 64 位架构。

对于 ARM 架构,32 位库位于 armeabi-v7a 中。 对应的 64 位库则位于 arm64-v8a 中。

对于 x86 架构,32 位库位于 x86 中,64 位库则位于 x86_64 中。

首先要确保这两个文件夹中都有原生库。总结如下:

平台32 位库文件夹64 位库文件夹
ARMlib/armeabi-v7alib/arm64-v8a
x86lib/x86lib/x86_64

请注意,每个文件夹中的一套库可能完全相同,也可能不完全相同,这取决于应用的具体情况。您应达到的目标是确保您的应用能够在仅支持 64 位架构的环境中正常运行。

通常情况下,同时针对 32 位和 64 位架构构建的 APK 或软件包会具有这两种 ABI 的文件夹,每个文件夹中都有一套相应的原生库。如果您的应用不支持 64 位架构,那么您很可能会看到 32 位 ABI 文件夹,但没有 64 位文件夹。

使用 APK 分析器查找原生库

APK 分析器是一款可用于对构建的 APK 进行各方面评估的工具。针对我们目前所讨论的情况,我们将使用该工具查找原生库,以确定是否具备 64 位库。

1.打开 Android Studio,然后打开任一项目

2.从菜单中依次选择 Build > Analyze APK…

3.选择您要评估的 APK。

4.查看 lib 文件夹,您可以在其中找到“.so”文件。如果在您的应用中找不到任何“.so”文件,则说明该应用的相应库已准备就绪,您无需采取进一步措施。如果您看到 armeabi-v7a 或 x86,则说明您有 32 位库。

5.检查是否 arm64-v8a 或 x86_64 文件夹中有类似的“.so”文件。

6.如果您没有任何 arm64-v8a 或 x86_64 库,则需要更新构建流程以开始构建并打包 APK 中的这些工件。

7.如果您看到 32 位和 64 位的库均已打包到软件包中,则可以跳至在 64 位硬件上测试应用

通过解压缩 APK 查找原生库

APK 文件的结构类似于 ZIP 文件,可以像 ZIP 文件一样解压缩。 如果您更喜欢使用命令行或任何其他解压缩工具,也可以采用解压缩 APK 的方法。

只需解压缩 APK 文件(根据您使用的解压缩工具,您可能需要将其重命名为 .zip),然后按照上文中的指南浏览解压缩后的文件,即可确定您的应用是否已经为支持 64 位设备做好准备了。

例如,您可以从命令行中运行如下命令:

:: Command Line
> zipinfo -1 YOUR_APK_FILE.apk | grep .so$
lib/armeabi-v7a/libmain.so
lib/armeabi-v7a/libmono.so
lib/armeabi-v7a/libunity.so
lib/arm64-v8a/libmain.so
lib/arm64-v8a/libmono.so
lib/arm64-v8a/libunity.so复制

请注意,此示例中存在armeabi-v7a库和arm64-v8a库,这表明该应用支持 64 位架构。

使用 64 位库构建应用

下面针对构建 64 位库做出了相关的说明。不过,需要指出的是,以下内容仅介绍了如何构建在源代码的基础上可构建的代码和库。

如果您使用任何外部 SDK 或库,请确保按照上文所述的步骤使用 64 位版本。如果没有 64 位版本可用,请与相应 SDK 或库的所有者联系,并在规划支持 64 位设备的方案时将这一点考虑在内。

使用 Android Studio 或 Gradle 进行构建

大多数 Android Studio 项目都使用 Gradle 作为底层构建系统,因此本部分适用于使用这两种工具进行构建的情况。针对原生代码进行构建很简单,只需将 arm64-v8a 和/或 x86_64(视您要支持的架构而定)添加到应用的“build.gradle”文件中的 ndk.abiFilters 设置中即可:

// Your app's build.gradle
apply plugin: 'com.android.app'

android {
   compileSdkVersion 27
   defaultConfig {
       appId "com.google.example.64bit"
       minSdkVersion 15
       targetSdkVersion 28
       versionCode 1
       versionName "1.0"
       ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
// ...复制

使用 CMake 进行构建

如果您的应用是使用 CMake 构建的,那么您可以通过将 arm64-v8a 传递到“-DANDROID_ABI”参数来针对 64 位 ABI 进行构建:

:: Command Line
> cmake -DANDROID_ABI=arm64-v8a … or
> cmake -DANDROID_ABI=x86_64 …复制

在使用externalNativeBuild时,此方法无效。请参阅使用 Gradle 进行构建部分。

使用 ndk-build 进行构建

如果您的应用是使用 ndk-build 构建的,那么您可以使用 APP_ABI 变量修改“Application.mk”文件,从而针对 64 位 ABI 进行构建:

APP_ABI := armeabi-v7a arm64-v8a x86 x86_64复制

在使用externalNativeBuild时,此方法无效。请参阅使用 Gradle 进行构建部分。

将 32 位代码移植到 64 位架构

如果您的代码已经可以在桌面或 iOS 平台上运行,那么您无需针对 Android 做额外的工作。如果这是第一次针对 64 位系统构建您的代码,那么您需要解决的主要问题是指针不再适合 int 这样的 32 位整数类型。您将需要更新以 intunsigned 或 uint32_t 等类型存储指针的代码。在 Unix 系统上,long 对应的是指针大小,但在 Windows 上并非如此,因此您应该改用释意类型 uintptr_t 或 intptr_t。使用 ptrdiff_t 类型来存储两个指针之间的差异。

您应该始终选择使用 <stdint.h> 中定义的特定固定宽度整数类型,而不是 int 或 long 等传统类型,即便对于非指针也应如此。

使用以下编译器标记来捕捉代码在指针和整数之间转换不正确的情况:

-Werror=pointer-to-int-cast
-Werror=int-to-pointer-cast
-Werror=shorten-64-to-32复制

具有int字段(包含指向 C/C++ 对象的指针)的 Java 类也有同样的问题。在 JNI 源代码中搜索jint,并确保切换到long(Java 端)和jlong(C++ 端)。

注意:因指针被截断而引起的崩溃将表现为 SIGSEGV,其中错误地址的前 32 位全部为零。

对于 64 位代码而言,隐式函数声明的危险性要高得多。C/C++ 假定隐式声明的函数(即编译器未检测到声明的函数)的返回值类型为int。如果函数的实际返回值类型是指针,那么在 32 位系统上是可行的,因为在 32 位系统中指针的类型为int,但在 64 位系统中,编译器会丢弃指针的前半部分。例如:

// This function returns a pointer:
// extern char* foo();

// If you don't include a header that declares it,
// when the compiler sees this:
char* result = foo();

// Instead of compiling that to:
result = foo();

// It compiles to something equivalent to:
result = foo() & 0xffffffff;

// Which will then cause a SIGSEGV if you try to dereference `result`.复制

以下编译器标记会将隐式函数声明警告变成错误,以便您能够更轻松地查找和解决此问题:

-Werror=implicit-function-declaration复制

如果您有内联汇编程序,您需要重新编写该程序或使用普通的 C/C++ 实现。

如果您对类型大小进行了硬编码(例如,8 或 16 字节),请使用等效的 sizeof(T) 表达式(例如 sizeof(void*))来替换它们。

如果需要有条件地编译不同于 64 位的 32 位代码,则对于一般性的 32/64 差异,您可以使用 #if defined(__LP64__);对于 Android 支持的具体架构,可以使用 __arm__、__aarch64__ (arm64)、__i386__ (x86) 和 __x86_64__。

您需要调整类似 printf 或 scanf 的函数的格式字符串,因为如果使用传统的格式说明符,您无法以一种对 32 位和 64 位设备都正确的方式来指定 64 位类型。您可利用 <inttypes.h> 中的PRI 和 SCN 宏来解决此问题,PRIxPTR 和 SCNxPTR 分别用于写入/读取十六进制指针,PRId64 和 SCNd64 分别用于以可移植的方式写入/读取 64 位值。

在移位时,您可能需要使用 1ULL 来获取要移位的 64 位常数,而不能使用仅支持 32 位的 1。

利用 Android App Bundle 减少大小增加量

为您的应用添加 64 位架构支持可能会导致 APK 的大小增加。我们强烈建议您利用 Android APP Bundle 功能,以尽量减小因在同一 APK 中同时包含 32 位和 64 位原生代码而对 APK 大小产生的影响。

实际上,将应用改为使用 Android App Bundle 可以缩减 APK 的大小,使其比现在更小。

游戏开发者

我们知道,迁移第三方游戏引擎是一个耗费人力的过程,并且需要很长的准备时间。庆幸的是,三大最常用的引擎目前都支持 64 位架构:

  • Unreal(自 2015 年起)
  • Cocos2d(自 2015 年起)
  • Unity(自 2018 年起)

Unity 开发者

升级到支持的版本

Unity 自版本 2018.2 和 2017.4.16 开始提供 64 位支持。

如果您发现自己使用的 Unity 版本不支持 64 位架构,请确定要升级到的版本,并按照 Unity 提供的指南迁移您的环境,确保将您的应用升级到可构建 64 位库的版本。Unity 建议您升级到该编辑器的最新 LTS 版本,以获取最新的功能和更新。

下面的图表概述了 Unity 的各个版本以及您应该采取的措施:

更改构建设置以输出 64 位库

如果您使用的 Unity 版本支持 64 位的 Android 库,那么您可以通过调整构建设置来生成 64 位版本的应用。您还需要使用 IL2CPP 后端作为 Scripting Backend(详见此处)。要为构建 64 位架构而设置 Unity 项目,请按以下步骤操作:

1.转到 Build Settings,然后确认 Unity 标志是否显示在 Platform 下的 Android 旁边,以确保您是在针对 Android 进行构建。

a.如果 Unity 标志未显示在 Android 平台旁边,请选择 Android,然后点击 Switch Platform。

2.点击 Player Settings。

3.依次转到 Player Settings Panel > Settings for Android > Other Settings > Configuration

4.将 Scripting Backend 设为 IL2CPP

5.依次选择 Target Architecture > ARM64 复选框。

6.照常构建!

请注意,针对 ARM64 进行构建需要您专门针对该平台构建您的所有资产。请按照 Unity 的指南来缩减 APK 大小,同时考虑利用Android App Bundle功能来减小大小增加量。

RenderScript 和 64 位合规性

如果您的应用使用 RenderScript 并且是通过较低版本的 Android 工具构建的,该应用可能会存在 64 位合规性问题。使用版本低于 21.0.0 的构建工具时,编译器可能会将生成的位码放到外部 .bc 文件中。64 位架构不再支持这些旧的 .bc 文件,因此,如果您的 APK 中有这类文件,就会造成合规性问题。

要解决此问题,请移除项目中的所有 .bc 文件,将环境升级到 build-tools-21.0.0 或更高版本,并将 Android Studio 中的 renderscriptTargetApi 设为 21+,以指示编译器不要生成 .bc 文件。然后,重新构建您的应用,检查是否有 .bc 文件,再将应用上传到 小米应用商店。

在 64 位硬件上测试应用

64 位版本的应用应提供与 32 位版本相同的质量和功能集。请对您的应用进行测试,以确保使用最新的 64 位设备的用户能够在您的应用中获得优质的体验。

要开始测试您的应用,您要有支持 64 位架构的设备。时下有很多支持 64 位架构的热门设备,例如 Google 的 Pixel 以及其他旗舰设备。

最简单的 APK 测试方法就是使用 adb 安装该应用。大多数情况下,您可以提供 --abi 作为参数,用以指示要将哪些库安装到设备上。这样在设备上安装该应用时便会仅包含 64 位库。

:: Command Line
# A successful install:
> adb install --abi armeabi-v7a YOUR_APK_FILE.apk
Success

# If your APK does not have the 64-bit libraries:
> adb install --abi arm64-v8a YOUR_APK_FILE.apk
adb: failed to install YOUR_APK_FILE.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

# If your device does not support 64-bit, an emulator, for example:
> adb install --abi arm64-v8a YOUR_APK_FILE.apk
ABI arm64-v8a not supported on this device复制

安装成功后,请照常对应用进行测试,以确保其质量与 32 位版本相同。

发布

如果您觉得应用已准备妥当,请照常发布。与往常一样,请继续遵循部署应用的最佳做法。我们建议利用封闭式测试轨道向有限数量的用户发布应用,以确保应用的质量一致。

在发布重大更新时,也务必要先在支持 64 位的设备上进行全面测试,然后再面向更广泛的受众群体发布。

小米开放平台32/64分包上传说明

应用32/64位安装包上传须知

1、目的

为更好地提升APP性能体验,降低APP功耗影响,同时保证APP在手机上的运行效率和兼容性;小米应用商店将针对不同机型下发合适的包体,推进国内安卓生态对64位架构的支持。

开发者可以在了解本文档描述的规则后,选择适合您的传包模式。

2、安装包要求

  • 同一应用的包名、应用名称、签名需相同,每种安装包为独立且完整的apk文件;
  • 双包应用上传或更新时,需保证双包同时审核通过才可上线;
  • 双包上传时,两个包体的md5值不能相同;
  • 支持从cpu架构维度拆分。

3、单包上传规则

  • 2022年5月6日后新上传的应用,单包上传入口仅支持上传32/64位兼容包和64位架构包,不支持32位架构包;
  • 2022年5月6日前的在架包更新时,单包上传入口支持上传32位、64位安装包或32/64位兼容包。

:“单包上传”的32位架构包入口,仅为给开发者提供过渡期选择,近期将会关闭。为避免应用分发受影响,建议开发者尽快完成64位适配。

4、双包上传规则

  • 首次使用“双包上传”,或从“单包上传”更换为“双包上传”时:必须同时上传32位、64位架构包;
  • 双包同时上传时,两个包体的versioncode需保持一致,且两个包体需要同时审核通过后才可上架。

操作方法/路径

1、应用创建

1.1 登录小米应用商店开发者站官网,点击“创建应用”,开始应用首次创建。

图:创建应用

1.2 进入创建应用页面,在此页面您需要填写语言、操作系统、应用名称、应用包名等信息(注:后续应用创建流程请参考应用创建操作指南)。

图:输入应用基本信息

1.3 创建包名后,进入到完善资料页,完成应用安装包的上传,在该页面可选择APK上传方式为“单包上传”或“双包上传”。

  • 单包上传:支持上传64位安装包或32/64位兼容包;
  • 双包上传:需同时上传32位和64位两个安装包。
图:选择上传安装包类型

如果您选择的是单包上传,目前不支持上传32位安装包。当上传的apk包是32位时,会出现弹窗错误提示并同时清空上传的安装包。

图:单包上传32位安装包错误提示

2、应用更新

2.1 进入应用管理界面,点击“管理”按钮进入应用详情页。

图:管理应用

2.2 点击应用详情页“更新版本”按钮,进入完善资料-测试审核-发布上线的流程。

图:版本更新

2.3 根据您的安装包适配情况上传新的应用安装包。

  • 单包上传:支持上传32位、64位安装包或32/64位兼容包;
  • 双包上传:需同时上传32位和64位两个安装包。
图:选择上传安装包类型

2.4 应用更新后续流程请参考应用更新、修改操作指南

应用适配常见问题

1、应用如何适配64位,是否有适配技术文档?

A:请参考小米应用商店支持 64 位架构适配文档

2、什么是32/64位兼容安装包?

A:32/64位兼容安装包指既能支持32位手机系统又同时支持64位手机系统的安装包。

3、同时上传32/64位安装包需要注意什么?

A:同时上传32位、64位安装包需要在正确入口进行上传,且需要保障32位、64位安装包包名、版本、签名一致,应用商店会对两个包体同时进行审核。

4、32/64位双包上传,是否会影响原广告账号投放?

A:不会影响原广告账号投放。

5、适配后,用户在应用商店搜索是否会出现2个同样的应用?

A:双包上传后,用户不会在小米应用商店搜索到2个同样的应用,商店对每个APK会针对不同的设备CPU架构进行下发,即32位应用下发32位CPU架构设备,64位应用下发64位CPU架构设备。

6、除包体适配外,是否还需其他材料适配?

A:仅需做64位应用包体适配,无需重新制作其他物料。

以上是应用32/64位安装包上传的相关内容,如您仍有问题,可进入问题工单系统,与我们取得联系。