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

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

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](https://developer.apple.com/news/?id=yqf4kgwb){:target="_blank"}

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](https://github.com/ZhgChgLi/ZReviewsBot){:target="_blank"}

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](https://docs.fastlane.tools/best-practices/continuous-integration/#important-note-about-session-duration){:target="_blank"} by Fastlane

important-note-about-session-duration by Fastlane

  • 每個月不定時過期,要不定時去更新,時間久了真的很煩;而且這個 「 Know How 」其實不好交接給其他同事。

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

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

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

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

最終會得到類似以下的 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 商城頁面:

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

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

完整 Ruby 測試專案

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

首次打開:

1
bundle install

開始使用:

1
bundle exec ruby jwt.rb

Next

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

ZReviewsBot — Slack App Review 通知機器人

預計把我開發的 ZhgChgLi / ZReviewsBot 評價機器人全面改成新的 API 存取方式,解放被 Web Session 過期支配的恐懼!

===

本文首次發表於 Medium ➡️ 前往查看

This post is licensed under CC BY 4.0 by the author.

無痛轉移 Medium 到自架網站

-

Comments powered by Disqus.