敬告:此 DEMO 演示为开放测试页面,仅用于开发者快速测试体验应用功能,请严格遵守开发者协议,了解更多。
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版 jsBridge-v20240925.zip,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
♦ 1. Sign In with Apple 苹果 ID 授权登录;
♦ 2. 接入步骤:
♦ 2.1 苹果证书标识符(Identifier)需勾选 “Sign In with Apple” 功能(见示例截图),上传证书并生成苹果版安装包;
♦ 2.2 调用 checkSuport 接口检查当前设备是否支持苹果授权登录,如果支持则进入下一步;
♦ 2.3 调用 request 发起苹果 ID 授权登录,将回调的 data 提交到您的服务器 验证、PHP SDK 授权信息;
//高于或等于 iOS 13 才支持苹果 ID 授权登录 jsBridge.sia.checkSupport(function(succ, data) { alert(succ ? "支持" : "不支持"); });
//发起授权登录,回调返回 data 是 JSON 数据 //请提交到您的服务器 验证 授权信息 //如果出现 未完成注册(Sign-Up Not Completed) 错误,请前往 服务设置(Services) -> Sign in with Apple for Email Communication -> 添加 Email Sources,参考 这里。 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 的示例 在线解码 === 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] */