注册一门APP开发平台账号教程(手机打包版)

注册一门APP开发平台账号教程(手机打包版)

1.首先登录一门APP开发平台首页,点击免费试用按钮,进入注册页面

注册一门开发者

点击之后会跳转到注册登录页面;

2.推荐使用手机号登录,直接输入手机号,获取验证码即可快捷完成注册和登录!

当然您也可以使用第三方账号授权登录:

微信扫码登录

QQ授权登录

关注公共号登录

支付宝登录

强烈推荐使用手机短信一键登录

点击手机号登录,之后会弹出输入框

手机号快捷注册登录一门

输入手机号和验证码之后即可快捷登录一门APP开发者中心;

getDeviceId 获取设备ID APP开发获取设备ID教程

getDeviceId 获取设备ID APP开发获取设备ID教程

用做网页的技术做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

getDeviceId 获取设备ID APP开发获取设备ID教程

• 由于隐私限制,此设备ID已不可靠。

• 安卓推荐使用 getIMEI + getOAID

• 苹果推荐使用 getIDFA

核心代码示例,详情参阅demo

jsBridge.getDeviceId(function(id){
  alert(id);
});

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.getDeviceId(function(id){
  alert(id);
});

}
</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.getDeviceId(function(id){
  alert(id);
});

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

getIMEI 获取移动设备识别码 IMEI/MEID APP开发获取IMEI教程

getIMEI 获取移动设备识别码 IMEI/MEID APP开发获取IMEI教程

用做网页的技术做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

getIMEI 获取移动设备识别码 IMEI/MEID APP开发获取IMEI教程

• 获取移动设备识别码 IMEI/MEID,需要 READ_PHONE_STATE 隐私权限;

• 多个 IMEI/MEID 用逗号(,)分隔,拨号输入 *#06# 可查看;

• Android 10+ 不能获取 IMEI,此接口返回 Android Id;

• 仅支持安卓,苹果版推荐使用 getIDFA。

核心代码示例,详情参阅demo

jsBridge.getIMEI(function(imei){
  if (imei) {
    alert(imei);
  } else {
    alert("获取失败或没有权限");
  }
});

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.getIMEI(function(imei){
  if (imei) {
    alert(imei);
  } else {
    alert("获取失败或没有权限");
  }
});

}
</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.getIMEI(function(imei){
  if (imei) {
    alert(imei);
  } else {
    alert("获取失败或没有权限");
  }
});

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

getOAID 获取开放广告标识符 OAID APP开发获取OAID教程

getOAID 获取开放广告标识符 OAID APP开发获取OAID教程

用做网页的技术做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

getOAID 获取开放广告标识符 OAID APP开发获取OAID教程

• 详情请参考 移动安全联盟 官方说明;

• 除了各厂家较老的安卓系统基本都支持,可配合 getIMEI 使用;

• 仅支持安卓,苹果版推荐使用 getIDFA。

核心代码示例,详情参阅demo

jsBridge.getOAID(function(oaid){
  if (oaid) {
    alert(oaid);
  } else {
    alert("获取失败或此设备不支持");
  }
});

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.getOAID(function(oaid){
  if (oaid) {
    alert(oaid);
  } else {
    alert("获取失败或此设备不支持");
  }
});

}
</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.getOAID(function(oaid){
  if (oaid) {
    alert(oaid);
  } else {
    alert("获取失败或此设备不支持");
  }
});

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

request 发起苹果 ID 授权登录 APP开发接入苹果账号登录apple ID登录教程

request 发起苹果 ID 授权登录 APP开发接入苹果账号登录apple ID登录教程

用做网页的技术做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

request 发起苹果 ID 授权登录 APP开发接入苹果账号登录apple ID登录教程

核心代码示例,详情参阅demo

//发起授权登录,回调返回 data 是 JSON 数据
//请提交到您的服务器 验证 授权信息
jsBridge.sia.request(function(succ, data) {
  if (succ) {
    var str = JSON.stringify(data);
    alert("授权成功:\n" + str);
    jsBridge.setClipboardText(str);
    alert("已复制到剪贴板");
  } else {
    alert("取消了授权登录或不支持");
  }
});

//授权成功时回调函数返回的 data 示例数据
var exampleData = {
    //jwt Token 请在服务器端验证此 Token 是否有效
    //验证通过后使用此 Token 的 claims.sub 作为用户唯一标识
    "identityToken": "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnVwaW4xNTguYXBwLng4IiwiZXhwIjoxNjI4MzI1Mzc4LCJpYXQiOjE2MjgyMzg5NzgsInN1YiI6IjAwMTIwNi43MjA3NDI2YWM5MjA0MzcyOGEzYTZiZDA3NzkwYTdlNy4wNzQ1IiwiY19oYXNoIjoiemxMMXhHNWJsS0dQMEszRVRVZFVudyIsImVtYWlsIjoiZDIyMjhtNGo5bkBwcml2YXRlcmVsYXkuYXBwbGVpZC5jb20iLCJlbWFpbF92ZXJpZmllZCI6InRydWUiLCJpc19wcml2YXRlX2VtYWlsIjoidHJ1ZSIsImF1dGhfdGltZSI6MTYyODIzODk3OCwibm9uY2Vfc3VwcG9ydGVkIjp0cnVlfQ.iXbtj7rG4dBuyPNETEkc25MkWIF1P6Usfnyu2BByQQFv9dQ0vKvz_GbOLm2pjr19Sszp_Y6osiGNg3O5e1hKK3RJyVY4aeoMgdd4v6nDkuu0Qdetc0BPVYk_K2VSxpi80Gd40h6DScGSbQI9g8iJJ7b_YCCUpjxuS54HR5QUyCduV8Fwz_NijiYn8J5P0cARdNBaCvqOENuw8gVN2icWb3h6IUP9HDa89YndcWu93xHXeCDKSzu043PjhpkUh4E_F5EltElFoGZiRKXCBwPS5YW4zD_aD7by_n5U-Y2TleeDKzTyPu6NBkvfxN9vYaZEvM0QmXKMBH9J3-MZpo9lOg",
    "realUserStatus": "Unknown",
    //授权码
    "authorizationCode": "c558352f4c2b64a45afea4b612c6d9827.0.srsqw.ZG8w9UusG2jZ8Q4_x-2tVg",
    //用户姓名数据(注意只有第一次登录时才有,以后都会返回空数据)
    "fullName": {
        //家族姓氏
        "familyName": "张",
        //前缀
        "namePrefix": "",
        //名字
        "givenName": "三",
        //后缀
        "nameSuffix": "",
        //中名
        "middleName": "",
        //昵称
        "nickname": "永远的神"
    },
    //电子邮箱
    "email": "aaa@bbb.com",
    //状态
    "state": "",
    //用户唯一标识(与解码 jwt 格式 identityToken 出来的 claims.sub 字段相同)
    "user": "001206.7207426ac92043728a3a6bd07790a7e7.0745"
};
/*
解码 jwt 格式 identityToken 的示例
可使用此地址在线解码 http://jwt.calebb.net/

=== header
{
 kid: "eXaunmL",
 //签名算法
 alg: "RS256"
}.
=== claims
{
 iss: "https://appleid.apple.com",
 aud: "com.upin158.app.x8",
 exp: 1628325378,
 iat: 1628238978,
 //用户唯一标识
 sub: "001206.7207426ac92043728a3a6bd07790a7e7.0745",
 c_hash: "zlL1xG5blKGP0K3ETUdUnw",
 email: "d2228m4j9n@privaterelay.appleid.com",
 email_verified: "true",
 is_private_email: "true",
 auth_time: 1628238978,
 nonce_supported: true
}.
=== 签名数据 
[signature]

*/

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核心代码到此{}括号内-->
//发起授权登录,回调返回 data 是 JSON 数据
//请提交到您的服务器 验证 授权信息
jsBridge.sia.request(function(succ, data) {
  if (succ) {
    var str = JSON.stringify(data);
    alert("授权成功:\n" + str);
    jsBridge.setClipboardText(str);
    alert("已复制到剪贴板");
  } else {
    alert("取消了授权登录或不支持");
  }
});

//授权成功时回调函数返回的 data 示例数据
var exampleData = {
    //jwt Token 请在服务器端验证此 Token 是否有效
    //验证通过后使用此 Token 的 claims.sub 作为用户唯一标识
    "identityToken": "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnVwaW4xNTguYXBwLng4IiwiZXhwIjoxNjI4MzI1Mzc4LCJpYXQiOjE2MjgyMzg5NzgsInN1YiI6IjAwMTIwNi43MjA3NDI2YWM5MjA0MzcyOGEzYTZiZDA3NzkwYTdlNy4wNzQ1IiwiY19oYXNoIjoiemxMMXhHNWJsS0dQMEszRVRVZFVudyIsImVtYWlsIjoiZDIyMjhtNGo5bkBwcml2YXRlcmVsYXkuYXBwbGVpZC5jb20iLCJlbWFpbF92ZXJpZmllZCI6InRydWUiLCJpc19wcml2YXRlX2VtYWlsIjoidHJ1ZSIsImF1dGhfdGltZSI6MTYyODIzODk3OCwibm9uY2Vfc3VwcG9ydGVkIjp0cnVlfQ.iXbtj7rG4dBuyPNETEkc25MkWIF1P6Usfnyu2BByQQFv9dQ0vKvz_GbOLm2pjr19Sszp_Y6osiGNg3O5e1hKK3RJyVY4aeoMgdd4v6nDkuu0Qdetc0BPVYk_K2VSxpi80Gd40h6DScGSbQI9g8iJJ7b_YCCUpjxuS54HR5QUyCduV8Fwz_NijiYn8J5P0cARdNBaCvqOENuw8gVN2icWb3h6IUP9HDa89YndcWu93xHXeCDKSzu043PjhpkUh4E_F5EltElFoGZiRKXCBwPS5YW4zD_aD7by_n5U-Y2TleeDKzTyPu6NBkvfxN9vYaZEvM0QmXKMBH9J3-MZpo9lOg",
    "realUserStatus": "Unknown",
    //授权码
    "authorizationCode": "c558352f4c2b64a45afea4b612c6d9827.0.srsqw.ZG8w9UusG2jZ8Q4_x-2tVg",
    //用户姓名数据(注意只有第一次登录时才有,以后都会返回空数据)
    "fullName": {
        //家族姓氏
        "familyName": "张",
        //前缀
        "namePrefix": "",
        //名字
        "givenName": "三",
        //后缀
        "nameSuffix": "",
        //中名
        "middleName": "",
        //昵称
        "nickname": "永远的神"
    },
    //电子邮箱
    "email": "aaa@bbb.com",
    //状态
    "state": "",
    //用户唯一标识(与解码 jwt 格式 identityToken 出来的 claims.sub 字段相同)
    "user": "001206.7207426ac92043728a3a6bd07790a7e7.0745"
};
/*
解码 jwt 格式 identityToken 的示例
可使用此地址在线解码 http://jwt.calebb.net/

=== header
{
 kid: "eXaunmL",
 //签名算法
 alg: "RS256"
}.
=== claims
{
 iss: "https://appleid.apple.com",
 aud: "com.upin158.app.x8",
 exp: 1628325378,
 iat: 1628238978,
 //用户唯一标识
 sub: "001206.7207426ac92043728a3a6bd07790a7e7.0745",
 c_hash: "zlL1xG5blKGP0K3ETUdUnw",
 email: "d2228m4j9n@privaterelay.appleid.com",
 email_verified: "true",
 is_private_email: "true",
 auth_time: 1628238978,
 nonce_supported: true
}.
=== 签名数据 
[signature]

*/

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

按钮执行JS示例代码

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


<!--这里可以直接复制JS核心代码到此{}括号内-->
//发起授权登录,回调返回 data 是 JSON 数据
//请提交到您的服务器 验证 授权信息
jsBridge.sia.request(function(succ, data) {
  if (succ) {
    var str = JSON.stringify(data);
    alert("授权成功:\n" + str);
    jsBridge.setClipboardText(str);
    alert("已复制到剪贴板");
  } else {
    alert("取消了授权登录或不支持");
  }
});

//授权成功时回调函数返回的 data 示例数据
var exampleData = {
    //jwt Token 请在服务器端验证此 Token 是否有效
    //验证通过后使用此 Token 的 claims.sub 作为用户唯一标识
    "identityToken": "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnVwaW4xNTguYXBwLng4IiwiZXhwIjoxNjI4MzI1Mzc4LCJpYXQiOjE2MjgyMzg5NzgsInN1YiI6IjAwMTIwNi43MjA3NDI2YWM5MjA0MzcyOGEzYTZiZDA3NzkwYTdlNy4wNzQ1IiwiY19oYXNoIjoiemxMMXhHNWJsS0dQMEszRVRVZFVudyIsImVtYWlsIjoiZDIyMjhtNGo5bkBwcml2YXRlcmVsYXkuYXBwbGVpZC5jb20iLCJlbWFpbF92ZXJpZmllZCI6InRydWUiLCJpc19wcml2YXRlX2VtYWlsIjoidHJ1ZSIsImF1dGhfdGltZSI6MTYyODIzODk3OCwibm9uY2Vfc3VwcG9ydGVkIjp0cnVlfQ.iXbtj7rG4dBuyPNETEkc25MkWIF1P6Usfnyu2BByQQFv9dQ0vKvz_GbOLm2pjr19Sszp_Y6osiGNg3O5e1hKK3RJyVY4aeoMgdd4v6nDkuu0Qdetc0BPVYk_K2VSxpi80Gd40h6DScGSbQI9g8iJJ7b_YCCUpjxuS54HR5QUyCduV8Fwz_NijiYn8J5P0cARdNBaCvqOENuw8gVN2icWb3h6IUP9HDa89YndcWu93xHXeCDKSzu043PjhpkUh4E_F5EltElFoGZiRKXCBwPS5YW4zD_aD7by_n5U-Y2TleeDKzTyPu6NBkvfxN9vYaZEvM0QmXKMBH9J3-MZpo9lOg",
    "realUserStatus": "Unknown",
    //授权码
    "authorizationCode": "c558352f4c2b64a45afea4b612c6d9827.0.srsqw.ZG8w9UusG2jZ8Q4_x-2tVg",
    //用户姓名数据(注意只有第一次登录时才有,以后都会返回空数据)
    "fullName": {
        //家族姓氏
        "familyName": "张",
        //前缀
        "namePrefix": "",
        //名字
        "givenName": "三",
        //后缀
        "nameSuffix": "",
        //中名
        "middleName": "",
        //昵称
        "nickname": "永远的神"
    },
    //电子邮箱
    "email": "aaa@bbb.com",
    //状态
    "state": "",
    //用户唯一标识(与解码 jwt 格式 identityToken 出来的 claims.sub 字段相同)
    "user": "001206.7207426ac92043728a3a6bd07790a7e7.0745"
};
/*
解码 jwt 格式 identityToken 的示例
可使用此地址在线解码 http://jwt.calebb.net/

=== header
{
 kid: "eXaunmL",
 //签名算法
 alg: "RS256"
}.
=== claims
{
 iss: "https://appleid.apple.com",
 aud: "com.upin158.app.x8",
 exp: 1628325378,
 iat: 1628238978,
 //用户唯一标识
 sub: "001206.7207426ac92043728a3a6bd07790a7e7.0745",
 c_hash: "zlL1xG5blKGP0K3ETUdUnw",
 email: "d2228m4j9n@privaterelay.appleid.com",
 email_verified: "true",
 is_private_email: "true",
 auth_time: 1628238978,
 nonce_supported: true
}.
=== 签名数据 
[signature]

*/

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

checkSupport 检查设备是否支持苹果 ID 授权登录 APP开发接入苹果账号登录教程

checkSupport 检查设备是否支持苹果 ID 授权登录 APP开发接入苹果账号登录教程

用做网页的技术做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

checkSupport 检查设备是否支持苹果 ID 授权登录 APP开发接入苹果账号登录教程

♦ 1. Sign In with Apple 苹果 ID 授权登录;

♦ 2. 接入步骤:

♦ 2.1 苹果证书标识符(Identifier)需勾选 “Sign In with Apple” 功能(见示例截图),上传证书并生成苹果版安装包;

♦ 2.2 调用 checkSuport 接口检查当前设备是否支持苹果授权登录,如果支持则进入下一步;

♦ 2.3 调用 request 发起苹果 ID 授权登录,将回调的 data 提交到您的服务器 验证PHP SDK 授权信息;

核心代码示例,详情参阅demo

//高于或等于 iOS 13 才支持苹果 ID 授权登录
jsBridge.sia.checkSupport(function(succ, data) {
  alert(succ ? "支持" : "不支持");
});

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核心代码到此{}括号内-->
//高于或等于 iOS 13 才支持苹果 ID 授权登录
jsBridge.sia.checkSupport(function(succ, data) {
  alert(succ ? "支持" : "不支持");
});

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

按钮执行JS示例代码

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


<!--这里可以直接复制JS核心代码到此{}括号内-->
//高于或等于 iOS 13 才支持苹果 ID 授权登录
jsBridge.sia.checkSupport(function(succ, data) {
  alert(succ ? "支持" : "不支持");
});

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

APP实现苹果内购支付IOS内购接入流程步奏

1. 在 App Store Connect 填写 协议、税务和银行业务

2. 在 App Store Connect 添加 沙箱技术测试员(一个假的Apple ID,任意邮箱 + 不低于8位的大小写字母数字组合的密码)

3. 在测试APP的苹果手机 – 设置 – iTunes Store 与 App Store 页面,拉到最底部管理沙盒账户;

4. 在 App Store Connect 点进已经创建好的APP – 功能 – App 内购买项目,增删改查内购商品;

5. 参考 js SDK 文档 接入内购,基本流程如下:

5.1 引导用户购买的时候调用 canMakePayments 检查用户是否支持内购(一般都支持,想简单处理也可以省掉这一步);

5.2 执行 setTransanctionListener 设置交易监听器,在监听回调里面处理所有支付交易流程;

5.3 用户点购买的时候执行 purchase 发起付款,订单号可以放在 applicationUsername 字段,这个会在上一步的监听回调里面原样返回;

6. 重点在于处理 5.2 步 setTransanctionListener 的回调,js 拿到支付凭证(receipt 字段,此时 state 为 1) 后就发到服务器,在服务器上调用苹果提供的接口验证凭证,验证成功就表示苹果已经真的帮你收到钱了,给用户开通相应服务即可;

7. 在调用 finishTransaction 完成交易之前,交易信息会一直存在,所以在确认不再需这个交易信息时(比如 state == 2 交易失败,state == 1 并且已在服务器端确认)应调用 finishTransaction 把他结束掉,以后就不会在 setTransanctionListener 的回调中再次收到这笔交易了;

cancelDownloads 取消下载 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做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

cancelDownloads 取消下载 APP开发接入苹果内购IOS内购开发教程

请在 setDownloadListener 中接收下载信息

核心代码示例,详情参阅demo

jsBridge.iap.cancelDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

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.iap.cancelDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

}
</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.iap.cancelDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

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

resumeDownloads 恢复下载 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做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

resumeDownloads 恢复下载 APP开发接入苹果内购IOS内购开发教程

请在 setDownloadListener 中接收下载信息

核心代码示例,详情参阅demo

jsBridge.iap.resumeDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

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.iap.resumeDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

}
</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.iap.resumeDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

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

pauseDownloads 暂停下载 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做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

pauseDownloads 暂停下载 APP开发接入苹果内购IOS内购开发教程

请在 setDownloadListener 中接收下载信息

核心代码示例,详情参阅demo

jsBridge.iap.pauseDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

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.iap.pauseDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

}
</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.iap.pauseDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

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

startDownloads 开始下载 APP开发实现苹果内购IOS内购开发教程

用做网页的技术做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

startDownloads 开始下载 APP开发实现苹果内购IOS内购开发教程

请在 setDownloadListener 中接收下载信息

核心代码示例,详情参阅demo

jsBridge.iap.startDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

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.iap.startDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

}
</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.iap.startDownloads({
  //下载内容ID组成的数组
  contentIds: [
    "contentId1",
    "contentId2",
    "..."
  ]
});

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

setDownloadListener 设置下载监听器 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做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

setDownloadListener 设置下载监听器 APP开发接入苹果内购IOS内购开发教程

• 调用 startDownloads/pauseDownloads/resumeDownloads/cancelDownloads 方法之前应设置本监听器,所有下载状态变更都会通知到此监听器。

• 系统以数组形式将下载信息传递给回调参数 downloads

• 如果多次设置监听器,只有最后一个才会收到通知。

核心代码示例,详情参阅demo

jsBridge.iap.setDownloadListener(function(succ, downloads) {
  if (succ) {
    alert(JSON.stringify(downloads));
  } else {
    alert("操作失败\n" + JSON.stringify(downloads));
  }
});
alert("已设置监听器");

/**
downloads 下载信息数组
[{    
  state:         //下载状态,详见setTransanctionListener的下载状态常量说明,数字类型
  transactionId: //下载内容所属交易id,字符串类型
  contentId:     //下载内容id,字符串类型
  progress:      //下载进度,取值范围0~1,数字类型
  contentLength: //文件内容大小,数字类型
  timeRemaining: //下载剩余时间,-1时表示未知,数字类型
  contentVersion://下载内容的版本,字符串类型
  contentURL:    //下载成功后文件路径,字符串类型
  errorCode:     //下载失败时的错误码,数字类型
  errorMsg:      //下载失败时的错误描述,字符串类型
}]

**/

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.iap.setDownloadListener(function(succ, downloads) {
  if (succ) {
    alert(JSON.stringify(downloads));
  } else {
    alert("操作失败\n" + JSON.stringify(downloads));
  }
});
alert("已设置监听器");

/**
downloads 下载信息数组
[{    
  state:         //下载状态,详见setTransanctionListener的下载状态常量说明,数字类型
  transactionId: //下载内容所属交易id,字符串类型
  contentId:     //下载内容id,字符串类型
  progress:      //下载进度,取值范围0~1,数字类型
  contentLength: //文件内容大小,数字类型
  timeRemaining: //下载剩余时间,-1时表示未知,数字类型
  contentVersion://下载内容的版本,字符串类型
  contentURL:    //下载成功后文件路径,字符串类型
  errorCode:     //下载失败时的错误码,数字类型
  errorMsg:      //下载失败时的错误描述,字符串类型
}]

**/

}
</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.iap.setDownloadListener(function(succ, downloads) {
  if (succ) {
    alert(JSON.stringify(downloads));
  } else {
    alert("操作失败\n" + JSON.stringify(downloads));
  }
});
alert("已设置监听器");

/**
downloads 下载信息数组
[{    
  state:         //下载状态,详见setTransanctionListener的下载状态常量说明,数字类型
  transactionId: //下载内容所属交易id,字符串类型
  contentId:     //下载内容id,字符串类型
  progress:      //下载进度,取值范围0~1,数字类型
  contentLength: //文件内容大小,数字类型
  timeRemaining: //下载剩余时间,-1时表示未知,数字类型
  contentVersion://下载内容的版本,字符串类型
  contentURL:    //下载成功后文件路径,字符串类型
  errorCode:     //下载失败时的错误码,数字类型
  errorMsg:      //下载失败时的错误描述,字符串类型
}]

**/

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

finishTransaction 完成指定交易 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做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

finishTransaction 完成指定交易 APP开发接入苹果内购IOS内购开发教程

• 在完成购买并提供给用户相关功能后应该完成此次交易;

• finishTransaction 成功后,此交易将从 UnfinishedTransactions 队列中移除;

• 请在 setTransanctionListener 中接收交易数据;

核心代码示例,详情参阅demo

jsBridge.iap.finishTransaction({
  //交易id
  transactionId: "3A266867-8275-4299-9BEF-FF7A8A207D21"
});

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.iap.finishTransaction({
  //交易id
  transactionId: "3A266867-8275-4299-9BEF-FF7A8A207D21"
});

}
</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.iap.finishTransaction({
  //交易id
  transactionId: "3A266867-8275-4299-9BEF-FF7A8A207D21"
});

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

restoreTransactions 恢复用户以前购买过的所有商品交易 APP开发实现苹果内购IOS内购开发教程

用做网页的技术做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

restoreTransactions 恢复用户以前购买过的所有商品交易 APP开发实现苹果内购IOS内购开发教程

请在 setTransanctionListener 中接收交易数据

核心代码示例,详情参阅demo

jsBridge.iap.restoreTransactions();

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.iap.restoreTransactions();

}
</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.iap.restoreTransactions();

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

purchase 购买产品 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做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

purchase 购买产品 APP开发接入苹果内购IOS内购开发教程

请在 setTransanctionListener 中接收交易数据

核心代码示例,详情参阅demo

jsBridge.iap.purchase({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID
  productId : "com.yidiantongqa.app.vip60",
  //可选,购买数量,不小于1的整数,默认1
  quantity  : 1,
  //可选,用户信息,交易回调里面原样返回,默认空
  applicationUsername: "myString"
});

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.iap.purchase({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID
  productId : "com.yidiantongqa.app.vip60",
  //可选,购买数量,不小于1的整数,默认1
  quantity  : 1,
  //可选,用户信息,交易回调里面原样返回,默认空
  applicationUsername: "myString"
});

}
</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.iap.purchase({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID
  productId : "com.yidiantongqa.app.vip60",
  //可选,购买数量,不小于1的整数,默认1
  quantity  : 1,
  //可选,用户信息,交易回调里面原样返回,默认空
  applicationUsername: "myString"
});

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

getUnfinishedTransactions 获取未完成的交易 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做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

getUnfinishedTransactions 获取未完成的交易 APP开发接入苹果内购IOS内购开发教程

请在 setTransanctionListener 中接收交易数据

核心代码示例,详情参阅demo

jsBridge.iap.getUnfinishedTransactions();

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.iap.getUnfinishedTransactions();

}
</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.iap.getUnfinishedTransactions();

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

setTransanctionListener 设置交易监听器 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做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

setTransanctionListener 设置交易监听器 APP开发接入苹果内购IOS内购开发教程

• 调用 getUnfinishedTransactions/purchase/restoreTransactions/finishTransaction 方法之前应设置本监听器,所有交易状态变更都会通知到此监听器。

• 系统以数组形式将交易信息传递给回调参数 transactions

• 如果多次设置监听器,只有最后一个才会收到通知。

核心代码示例,详情参阅demo

jsBridge.iap.setTransanctionListener(function(succ, transactions) {
  if (succ) {
    var json = JSON.stringify(transactions);
    jsBridge.setClipboardText(json);
    //transactions.forEach(function(x){jsBridge.iap.finishTransaction({transactionId: x.transactionId});})
    alert(json);
  } else {
    alert("操作失败\n" + JSON.stringify(transactions));
  }
});
alert("已设置监听器");

/**
transactions 返回交易信息数组
[{
  state:                 //交易状态,详见交易状态常量,数字类型    
  transactionId:         //交易id,字符串类型    
  originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
  transactionDate:       //交易时间,UNIX 时间戳(秒)
  receipt:               //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
  errorCode:             //交易失败时的错误码,数字类型    
  errorMsg:              //交易失败时的说明,字符串类型    
  payment:               //商品购买信息
  {
    productId:           //商品ID,字符串类型
    quantity:            //购买数量,数字类型
    applicationUsername: //用户信息,字符串类型
  },
  downloads:             //有下载内容时的下载信息列表
  [{    
    state:               //下载状态,详见下载状态常量,数字类型
    transactionId:       //下载内容所属交易id,字符串类型
    contentId:           //下载内容id,字符串类型
    progress:            //下载进度,取值范围0~1,数字类型
    contentLength:       //文件内容大小,数字类型
    timeRemaining:       //下载剩余时间,-1时表示未知,数字类型
    contentVersion:      //下载内容的版本,字符串类型
    contentURL:          //下载成功后文件路径,字符串类型
    errorCode:           //下载失败时的错误码,数字类型
    errorMsg:            //下载失败时的错误描述,字符串类型
  }]
}]

state(transaction) 交易状态常量说明
0: 已加入交易队列(Transaction is being added to the server queue.)
1: 交易完成(Transaction is in queue, user has been charged.  Client should complete the transaction.)
2: 交易失败(Transaction was cancelled or failed before being added to the server queue.)
3: 恢复购买(Transaction was restored from user's purchase history.  Client should complete the transaction.)
4: 交易等待被确认(The transaction is in the queue, but its final status is pending external action.)
    
state(download) 下载状态常量说明
0: 等待下载(Download is inactive, waiting to be downloaded)
1: 正在下载(Download is actively downloading)
2: 暂停下载(Download was paused by the user)
3: 下载完成(Download is finished, content is available)
4: 下载失败(Download failed)
5: 取消下载(Download was cancelled)

**/

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.iap.setTransanctionListener(function(succ, transactions) {
  if (succ) {
    var json = JSON.stringify(transactions);
    jsBridge.setClipboardText(json);
    //transactions.forEach(function(x){jsBridge.iap.finishTransaction({transactionId: x.transactionId});})
    alert(json);
  } else {
    alert("操作失败\n" + JSON.stringify(transactions));
  }
});
alert("已设置监听器");

/**
transactions 返回交易信息数组
[{
  state:                 //交易状态,详见交易状态常量,数字类型    
  transactionId:         //交易id,字符串类型    
  originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
  transactionDate:       //交易时间,UNIX 时间戳(秒)
  receipt:               //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
  errorCode:             //交易失败时的错误码,数字类型    
  errorMsg:              //交易失败时的说明,字符串类型    
  payment:               //商品购买信息
  {
    productId:           //商品ID,字符串类型
    quantity:            //购买数量,数字类型
    applicationUsername: //用户信息,字符串类型
  },
  downloads:             //有下载内容时的下载信息列表
  [{    
    state:               //下载状态,详见下载状态常量,数字类型
    transactionId:       //下载内容所属交易id,字符串类型
    contentId:           //下载内容id,字符串类型
    progress:            //下载进度,取值范围0~1,数字类型
    contentLength:       //文件内容大小,数字类型
    timeRemaining:       //下载剩余时间,-1时表示未知,数字类型
    contentVersion:      //下载内容的版本,字符串类型
    contentURL:          //下载成功后文件路径,字符串类型
    errorCode:           //下载失败时的错误码,数字类型
    errorMsg:            //下载失败时的错误描述,字符串类型
  }]
}]

state(transaction) 交易状态常量说明
0: 已加入交易队列(Transaction is being added to the server queue.)
1: 交易完成(Transaction is in queue, user has been charged.  Client should complete the transaction.)
2: 交易失败(Transaction was cancelled or failed before being added to the server queue.)
3: 恢复购买(Transaction was restored from user's purchase history.  Client should complete the transaction.)
4: 交易等待被确认(The transaction is in the queue, but its final status is pending external action.)
    
state(download) 下载状态常量说明
0: 等待下载(Download is inactive, waiting to be downloaded)
1: 正在下载(Download is actively downloading)
2: 暂停下载(Download was paused by the user)
3: 下载完成(Download is finished, content is available)
4: 下载失败(Download failed)
5: 取消下载(Download was cancelled)

**/

}
</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.iap.setTransanctionListener(function(succ, transactions) {
  if (succ) {
    var json = JSON.stringify(transactions);
    jsBridge.setClipboardText(json);
    //transactions.forEach(function(x){jsBridge.iap.finishTransaction({transactionId: x.transactionId});})
    alert(json);
  } else {
    alert("操作失败\n" + JSON.stringify(transactions));
  }
});
alert("已设置监听器");

/**
transactions 返回交易信息数组
[{
  state:                 //交易状态,详见交易状态常量,数字类型    
  transactionId:         //交易id,字符串类型    
  originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
  transactionDate:       //交易时间,UNIX 时间戳(秒)
  receipt:               //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
  errorCode:             //交易失败时的错误码,数字类型    
  errorMsg:              //交易失败时的说明,字符串类型    
  payment:               //商品购买信息
  {
    productId:           //商品ID,字符串类型
    quantity:            //购买数量,数字类型
    applicationUsername: //用户信息,字符串类型
  },
  downloads:             //有下载内容时的下载信息列表
  [{    
    state:               //下载状态,详见下载状态常量,数字类型
    transactionId:       //下载内容所属交易id,字符串类型
    contentId:           //下载内容id,字符串类型
    progress:            //下载进度,取值范围0~1,数字类型
    contentLength:       //文件内容大小,数字类型
    timeRemaining:       //下载剩余时间,-1时表示未知,数字类型
    contentVersion:      //下载内容的版本,字符串类型
    contentURL:          //下载成功后文件路径,字符串类型
    errorCode:           //下载失败时的错误码,数字类型
    errorMsg:            //下载失败时的错误描述,字符串类型
  }]
}]

state(transaction) 交易状态常量说明
0: 已加入交易队列(Transaction is being added to the server queue.)
1: 交易完成(Transaction is in queue, user has been charged.  Client should complete the transaction.)
2: 交易失败(Transaction was cancelled or failed before being added to the server queue.)
3: 恢复购买(Transaction was restored from user's purchase history.  Client should complete the transaction.)
4: 交易等待被确认(The transaction is in the queue, but its final status is pending external action.)
    
state(download) 下载状态常量说明
0: 等待下载(Download is inactive, waiting to be downloaded)
1: 正在下载(Download is actively downloading)
2: 暂停下载(Download was paused by the user)
3: 下载完成(Download is finished, content is available)
4: 下载失败(Download failed)
5: 取消下载(Download was cancelled)

**/

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

getProducts 获取产品列表 APP开发接入苹果内购IOS内购开发

用做网页的技术做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

getProducts 获取产品列表 APP开发接入苹果内购IOS内购开发

核心代码示例,详情参阅demo

jsBridge.iap.getProducts({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID数组
  productIds: [
    "com.yidiantongqa.app.vip30",
    "com.yidiantongqa.app.vip60",
    "com.yidiantongqa.app.vip360"
  ]
}, function(succ, products) {
  if (succ) {
    alert(JSON.stringify(products));
  } else {
    alert("操作失败\n" + JSON.stringify(products));
  }
});

/**
products 返回产品信息
{   
  invalidProductIds:[]      //无效的产品ID,如果你提供了无效的产品ID,会在这里返回,数组类型
  products:                 //有效的产品信息,数组类型
  [{
    productId:              //产品id,字符串类型
    title:                  //产品标题,字符串类型
    description:            //产品描述,字符串类型
    price:                  //产品价格,数字类型
    formattedPrice:         //产品格式化后的价格,如¥6.00,字符串类型
    downloadable:           //是否有下载内容,布尔类型
    downloadContentLengths: //下载内容长度,数字组成的数组
    downloadContentVersion: //下载内容的版本,字符串类型
  }]
}

**/

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.iap.getProducts({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID数组
  productIds: [
    "com.yidiantongqa.app.vip30",
    "com.yidiantongqa.app.vip60",
    "com.yidiantongqa.app.vip360"
  ]
}, function(succ, products) {
  if (succ) {
    alert(JSON.stringify(products));
  } else {
    alert("操作失败\n" + JSON.stringify(products));
  }
});

/**
products 返回产品信息
{   
  invalidProductIds:[]      //无效的产品ID,如果你提供了无效的产品ID,会在这里返回,数组类型
  products:                 //有效的产品信息,数组类型
  [{
    productId:              //产品id,字符串类型
    title:                  //产品标题,字符串类型
    description:            //产品描述,字符串类型
    price:                  //产品价格,数字类型
    formattedPrice:         //产品格式化后的价格,如¥6.00,字符串类型
    downloadable:           //是否有下载内容,布尔类型
    downloadContentLengths: //下载内容长度,数字组成的数组
    downloadContentVersion: //下载内容的版本,字符串类型
  }]
}

**/
}
</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.iap.getProducts({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID数组
  productIds: [
    "com.yidiantongqa.app.vip30",
    "com.yidiantongqa.app.vip60",
    "com.yidiantongqa.app.vip360"
  ]
}, function(succ, products) {
  if (succ) {
    alert(JSON.stringify(products));
  } else {
    alert("操作失败\n" + JSON.stringify(products));
  }
});

/**
products 返回产品信息
{   
  invalidProductIds:[]      //无效的产品ID,如果你提供了无效的产品ID,会在这里返回,数组类型
  products:                 //有效的产品信息,数组类型
  [{
    productId:              //产品id,字符串类型
    title:                  //产品标题,字符串类型
    description:            //产品描述,字符串类型
    price:                  //产品价格,数字类型
    formattedPrice:         //产品格式化后的价格,如¥6.00,字符串类型
    downloadable:           //是否有下载内容,布尔类型
    downloadContentLengths: //下载内容长度,数字组成的数组
    downloadContentVersion: //下载内容的版本,字符串类型
  }]
}

**/

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

canMakePayments 检查当前设备是否支持内购 APP开发接入苹果内购教程

♦ 苹果官方文档 https://developer.apple.com/documentation/appstorereceipts/verifyreceipt

♦ 沙盒凭证验证接口 https://sandbox.itunes.apple.com/verifyReceipt

♦ 生产环境凭证验证接口 https://buy.itunes.apple.com/verifyReceipt

♦ 注意,APP上架审核时苹果审核员用的是沙盒账户;

♦ 识别沙盒环境下收据的方法有两种:
1.根据凭证验证返回的字段 environment = sandbox。
2.根据凭证验证返回的状态码,如果 status = 21007,则表示当前的收据为沙盒环境下凭证;

♦ 构造JSON { “receipt-data” : “(receipt 支付凭证)” } POST 到苹果的验证接口,处理返回结果即可。

用做网页的技术做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

canMakePayments 检查当前设备是否支持内购 APP开发接入苹果内购教程

可能由于家长控制等原因,当前设备不支持APP内购买,在发起内购前可以先判断是否支持。

核心代码示例,详情参阅demo

jsBridge.iap.canMakePayments(function(yes) {
  alert(yes ? "支持内购" : "不支持内购");
});

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.iap.canMakePayments(function(yes) {
  alert(yes ? "支持内购" : "不支持内购");
});

}
</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.iap.canMakePayments(function(yes) {
  alert(yes ? "支持内购" : "不支持内购");
});

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