App Store Connect API 現已支援 讀取和管理 Customer Reviews
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 無法讓人彈性篩選、給的資訊也少、有數量上限、還有我們偶爾會遇到資料錯亂問題,很不穩定
二 是 透過 Fastlane — SpaceShip 幫我們封裝複雜的網頁操作、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 存取方式
1
curl -v -H 'Authorization: Bearer [signed token]' "https://api.appstoreconnect.apple.com/v1/apps"
Signed Token (JWT, JSON Web Token) 產生方式
參考 官方文件 。
- JWT Header:
1
{kid:"YOUR_KEY_ID", typ:"JWT", alg:"ES256"}
YOUR_KEY_ID
:參考上圖。
- JWT Payload:
1
2
3
4
5
6
{
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
- Ruyb JWT 工具在此: https://github.com/jwt/ruby-jwt
最終會得到類似以下的 JWT 結果:
1
4oxjoi8j69rHQ58KqPtrFABBWHX2QH7iGFyjkc5q6AJZrKA3AcZcCFoFMTMHpM.pojTEWQufMTvfZUW1nKz66p3emsy2v5QseJX5UJmfRjpxfjgELUGJraEVtX7tVg6aicmJT96q0snP034MhfgoZAB46MGdtC6kv2Vj6VeL2geuXG87Ys6ADijhT7mfHUcbmLPJPNZNuMttcc.fuFAJZNijRHnCA2BRqq7RZEJBB7TLsm1n4WM1cW0yo67KZp-Bnwx9y45cmH82QPAgKcG-y1UhRUrxybi5b9iNN
打看看?
有了 Token 我們就能來打看看 App Store Connect API!
1
curl -H 'Authorization: Bearer JWT' "https://api.appstoreconnect.apple.com/v1/apps/APPID/customerReviews"
APPID
可從 App Store Connect 後台取得:
或是 App 商城頁面:
- https://apps.apple.com/tw/app/pinkoi/id557252416
- APPID =
557252416
- 成功!🚀 我們現在可以使用這個方式撈取 App 評價,資料完整且可以完全交給機器執行,不需人工例行維護 (JWT 雖會過期,但是 Private Key 不會,我們每次請求都可藉由 Private Key 簽名產生 JWT 去存取即可)。
- 其他篩選參數、操作方法請參考 官方文件 。
⚠️ 您只能存取您有權限的 App 評價資料⚠️
完整 Ruby 測試專案
用一個 Ruby 檔案做了以上流程,可直接 Clone 下來填入資料即可測試使用。
首次打開:
1
bundle install
開始使用:
1
bundle exec ruby jwt.rb
Next
同理我們可以透過 API 去存取管理 ( API Overview ):
- [New] Customer reviews
- [New] Subscriptions
- [New] In-App Purchases
- [New] Xcode Cloud Workflows And Builds
- [Updated] Improving your App’s Performance
- TestFlight
- Users And Roles
- App Clips
- App Management
- App Metadata
- Pricing And Availability
- Provisioning
- Sales and Trends
有任何問題及指教歡迎 與我聯絡 。
===
View the English version of this article here.
本文首次發表於 Medium ➡️ 前往查看