IOS審核被拒:IOS蘋果授權登錄(Sign in with Apple)/Apple登錄/蘋果登錄集成教程


  昨天提交的ios app審核又被拒了,原因是因為app有提供三方微信登錄,而沒有提供蘋果登錄。蘋果就不爽了,就拒絕,那么就只有按要求接入蘋果登錄了。

根據蘋果審核指南要求,如果 app 使用第三方或社交登錄服務 (例如,Facebook 登錄、Google 登錄、通過 Twitter 登錄、通過 LinkedIn 登錄、通過 Amazon 登錄或微信登錄) 來對其進行設置或驗證這個 app 的用戶主帳戶,則該 app 必須同時提供“通過 Apple 登錄”作為同等選項。詳情參考:App Store 審核指南 - 通過 Apple 登錄

  HBuilderX 自 2.4.7+ 版本開始支持 Sign in with Apple (蘋果登錄),蘋果登錄是 iOS13 新增加的功能,當你的應用使用了第三方登錄比如微信登錄,同時也需要集成蘋果登錄,否則提交AppStore審核會被拒絕。

一、使用蘋果登錄的教程

  使用蘋果登錄首先需要在蘋果開發者后台開啟 App 的 Sign In with Apple 服務

注:只有發布Appstore的應用才能使用蘋果登錄。企業版開發者賬號不支持 Sign In with Apple (企業版開發者賬號指的是用於企業內部分發App,不能用於發布 App Store 的賬號,也就是價格為 299$ 的賬號)

1、登錄到蘋果開發者后台 ,編輯對應的 Identifier 勾選 Sign In with Apple 服務並保存

2、勾選或取消服務,會導致之前的 profile 描述文件失效,不需要新建,只要點擊 Edit 重新編輯對應的 profile文件,然后保存下載使用新的profile文件即可

3、在 HBuilderX 編輯項目的 manifest.json ,在 App SDK配置中找到蘋果登錄,並勾選。

  注意:測試蘋果登錄服務,需要提交雲打包或提交自定義基座打包,只有添加了蘋果登錄服務提交打包才會將蘋果登錄模塊打進安裝包,否則調不到相關方法

二、登錄按鈕樣式

  蘋果對登錄按鈕樣式有要求,請按照蘋果要求統一設置登錄按鈕的樣式,否則審核可能會被拒絕。

  需要注意的是:

  • 按鈕必須在顯著的位置(避免滑動屏幕才能看到)
  • 登錄按鈕有三種外觀:白色,帶有黑色輪廓線的白色和黑色,其他設計可能會影響審核
  • 按鈕圓角范圍及按鈕最小尺寸也有要求;
  • 具體規則請參考蘋果 官方文檔

  下面是原生端默認的幾種按鈕樣式供大家參考(width:130pt, height:30pt, corner radius: 6pt)

三、示例代碼 (詳細 api 請查閱 plus.oauth 文檔)

  注意:因為是 iOS13+ 系統才支持蘋果登錄,所以建議在App的界面入口判斷下,只有 iOS13 才顯示Apple登錄的選項

1、uni-app示例

uni.login({ provider: 'apple', success: function (loginRes) { // 登錄成功 
 uni.getUserInfo({ provider: 'apple', success() { // 獲取用戶信息成功 
 } }) }, fail: function (err) { // 登錄失敗 
 } }); 

  uni-app返回參數如下:

{ "openId": "000945.95452b**2f3b.0336", "fullName": { "familyName": "**", "giveName": "**", "givenName": "**" }, "email": "11**93@qq.com", "authorizationCode": "c9f248f**NmxxQ", "identityToken": "eyJraWQ**JleHC**Q", "realUserStatus": 2 }

2、5+App示例 (可以在 uniapp 中直接調用5+API)

  注意:因為是 iOS13+ 系統才支持蘋果登錄,所以在 iOS13 以下設備調用 plus.oauth.getServices 不會返回蘋果登錄對應的 service 對象

var appleOauth = null; plus.oauth.getServices(function(services) { for (var i in services) { var service = services[i]; // 獲取蘋果授權登錄對象,蘋果授權登錄id 為 'apple' iOS13以下系統,不會返回蘋果登錄對應的 service 
        if (service.id == 'apple') { appleOauth = service; break; } } appleOauth.login( function(oauth){ // 授權成功,蘋果授權返回的信息在 oauth.target.appleInfo 中 
 }, function(err) { // 授權失敗 error 
 }, { // 默認只會請求用戶名字信息,如需請求用戶郵箱信息,需要設置 scope: 'email' 
        scope: 'email' }) }, function(err) { // 獲取 services 失敗 
})

  5+ api 返回參數說明:

  注意:這里是 5+ api 返回的數據,uni 接口對 5+api 做了封裝,以實際返回結果為准

(1)appleInfo

屬性 類型 說明
user String 蘋果用戶唯一標識符
state String 驗證信息狀態
email String 用戶共享的可選電子郵件
fullName Object 用戶共享的可選全名
authorizationCode String 驗證數據
identityToken String Web令牌(JWT)
realUserStatus Number 標識用戶是否為真實的人 0:當前平台不支持,忽略該值;1:無法確認;2:用戶真實性非常高
scope String 返回信息作用域

(2)fullName

屬性 類型 說明
namePrefix String 名字前綴,頭銜、敬稱
givenName String 名字
middleName String 中間名
familyName String
nameSuffix String 名字后綴,學位、榮譽
nickName String 昵稱

(3)授權失敗 code 說明

code 說明
1000 未知錯誤
1001 取消授權
1002 返回值無效
1003 請求未處理
1004 授權失敗

四、最后提交雲打包或自定義基座打包進行功能測試

  注意事項:

1、只有首次彈出登錄授權框時才會有用戶名及email的項(email需要配置 scope: 'email' ),並且用戶可以刪除或編輯用戶名或隱藏用戶郵箱,如果用戶刪除了用戶名授權成功后fullname字段也會為空;

2、授權成功后再次調用登錄接口會先校驗上次授權是否依然有效,如有效,直接回調成功並返回上次授權成功時的數據。

  注意,此校驗不會校驗identityToken是否過期,需要用戶自行處理;

  如果想每次都彈出授權框獲取新的identityToken等信息,需要先調用'logout()',然后在調用登錄接口就會彈出授權框,注意這時授權框內不會在出現用戶名及郵箱,登錄成功后這兩個字段會為空,需要拿到 authorizationCode,identityToken 后傳給服務器,然后和蘋果服務器驗證可獲取用戶名稱等信息,具體請自行查閱文檔;

  如果想在授權框中再次出現用戶名或郵箱。需要在: 系統設置->AppleID->密碼與安全性->使用Apple ID 的 App 里面取消授權,然后再調用登錄接口;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM