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