App Store Connect API 現已支援 讀取和管理 Customer Reviews

ZhgChgLi
ZRealm Dev.
Published in
9 min readJul 20, 2022

--

App Store Connect API 2.0+ 全面更新,支援 In-app purchases、Subscriptions、Customer Reviews 管理

2022/07/19 News

Upcoming transition from the XML feed to the App Store Connect API

今早收到 Apple 開發者最新消息,App Store Connect API 新增支援 In-app purchases、Subscriptions、Customer Reviews 管理三項功能;讓開發者可以更彈性的將 Apple 開發流程與 CI/CD 或是商業後台做更密切、有效率的整合!

In-app purchases、Subscriptions 我沒碰,Customer Reviews 讓我興奮不已,之前發表過一篇「AppStore APP’s Reviews Slack Bot 那些事」探討 App 評價與工作流程整合的方式。

Slack 評價機器人 — ZReviewsBot

在 App Store Connect API 還沒支援之前,只有兩種方法能獲取 iOS App 評價:

一 是透過訂閱 Public RSS 取得,但是此 RSS 無法讓人彈性篩選、給的資訊也少、有數量上限、還有我們偶爾會遇到資料錯亂問題,很不穩定

二 是透過 FastlaneSpaceShip 幫我們封裝複雜的網頁操作、Session 管理,去 App Store Connection 網站後台撈取評價資料 (等於是起一個網頁模擬器爬蟲去後台爬資料)。

  • 好處是資料齊全、穩定,我們串接了一年沒有遇到任何資料問題。
  • 壞處是 Session 每個月都會過期,要手動重新登入,而且 Apple ID 目前全面都要綁定 2FA 驗證,所以這段也要手動完成,這樣才能產出有效的 Session;另外 Session 如果產的跟用的 IP 不一樣會馬上過期 (因此很難將機器人放上不固定 IP 的網路服務)。
important-note-about-session-duration by Fastlane
  • 每個月不定時過期,要不定時去更新,時間久了真的很煩;而且這個 「Know How」其實不好交接給其他同事。

但因為沒有其他方法,所以也只能這樣,直到今天早上收到消息….

⚠️ 注意:官方預計在 2022/11 取消原本的 XML (RSS) 存取方式。

2022/08/10 Update

我已基於新的 App Store Connect API 開發了新的 「ZReviewTender — 免費開源的 App Reviews 監控機器人

App Store Connect API 2.0+ Customer Reviews 試玩

建立 App Store Connect API Key

首先我們要登入 App Store Connect 後台,前往「Users and Access」->「Keys」->「App Store Connect API」:

點擊「+」,輸入名稱和權限;權限細則可參考官網說明,為了減少測試問題,這邊先選擇「App Manager」把權限開到最大。

點擊右方「Download API Key」下載保存你的「AuthKey_XXX.p8」Key。

⚠️ 注意:這個 Key 只能下載一次請妥善保存,若遺失只能 Revoke 現有的 & 重新建立。⚠️

⚠️ 切勿外洩 .p8 Key File⚠️

App Store Connect API 存取方式

curl -v -H 'Authorization: Bearer [signed token]' "https://api.appstoreconnect.apple.com/v1/apps"

Signed Token (JWT, JSON Web Token) 產生方式

參考官方文件

  • JWT Header:
{kid:"YOUR_KEY_ID", typ:"JWT", alg:"ES256"}

YOUR_KEY_ID:參考上圖。

  • JWT Payload:
{
iss: 'YOUR_ISSUE_ID',
iat: TOKEN 建立時間 (UNIX TIMESTAMP e.g 1658326020),
exp: TOKEN 失效時間 (UNIX TIMESTAMP e.g 1658327220),
aud: 'appstoreconnect-v1'
}

YOUR_ISSUE_ID:參考上圖。

exp TOKEN 失效時間:會因為不同存取功能或設定有不同的時間限制,有的可以永久、有的超過 20 分鐘即失效,需要重新產生,詳細可參考官方說明

使用 JWT.IO 或是以下附的 Ruby 範例產生 JWT

jwt.rb:

require 'jwt'
require 'time'

keyFile = File.read('./AuthKey_XXXX.p8') # YOUR .p8 private key file path
privateKey = OpenSSL::PKey::EC.new(keyFile)

payload = {
iss: 'YOUR_ISSUE_ID',
iat: Time.now.to_i,
exp: Time.now.to_i + 60*20,
aud: 'appstoreconnect-v1'
}

token = JWT.encode payload, privateKey, 'ES256', header_fields={kid:"YOUR_KEY_ID", typ:"JWT"}
puts token


decoded_token = JWT.decode token, privateKey, true, { algorithm: 'ES256' }
puts decoded_token

最終會得到類似以下的 JWT 結果:

4oxjoi8j69rHQ58KqPtrFABBWHX2QH7iGFyjkc5q6AJZrKA3AcZcCFoFMTMHpM.pojTEWQufMTvfZUW1nKz66p3emsy2v5QseJX5UJmfRjpxfjgELUGJraEVtX7tVg6aicmJT96q0snP034MhfgoZAB46MGdtC6kv2Vj6VeL2geuXG87Ys6ADijhT7mfHUcbmLPJPNZNuMttcc.fuFAJZNijRHnCA2BRqq7RZEJBB7TLsm1n4WM1cW0yo67KZp-Bnwx9y45cmH82QPAgKcG-y1UhRUrxybi5b9iNN

打看看?

有了 Token 我們就能來打看看 App Store Connect API!

curl -H 'Authorization: Bearer JWT' "https://api.appstoreconnect.apple.com/v1/apps/APPID/customerReviews"
  • APPID 可從 App Store Connect 後台取得:

或是 App 商城頁面:

  • 成功!🚀 我們現在可以使用這個方式撈取 App 評價,資料完整且可以完全交給機器執行,不需人工例行維護 (JWT 雖會過期,但是 Private Key 不會,我們每次請求都可藉由 Private Key 簽名產生 JWT 去存取即可)。
  • 其他篩選參數、操作方法請參考官方文件

⚠️ 您只能存取您有權限的 App 評價資料⚠️

完整 Ruby 測試專案

用一個 Ruby 檔案做了以上流程,可直接 Clone 下來填入資料即可測試使用。

首次打開:

bundle install

開始使用:

bundle exec ruby jwt.rb

Next

同理我們可以透過 API 去存取管理 (API Overview):

有任何問題及指教歡迎與我聯絡

--

--

ZhgChgLi
ZRealm Dev.

探索世界、求知若渴、教學相長;更愛電影、美劇、西音、運動、生活. www.zhgchg.li