文章目錄
- 前言
- 安裝 API Swift SDK
- 配置 API Swift SDK
- 生成分析報告
- 獲取所有可用的報告
- 獲取報告的分段
- 下載分段的數據
- 總結
前言
Apple 最近推出了50多個新的分析報告,其中包含數百個新的數據點和指標,以幫助開發者了解他們的應用程序的表現情況。
這些報告包括應用商店參與度、應用商店商業、應用使用情況、框架使用情況和性能等數據。
盡管這些新數據提供了許多見解,并且可能非常有價值,但它僅通過 App Store Connect API 提供,并且檢索數據的方式并不直觀。
在本文中,我將向你展示如何使用 Antoine Van Der Lee 的 App Store Connect Swift SDK 訪問這些新的指標。
安裝 API Swift SDK
安裝 App Store Connect API Swift SDK
在最新版本的 App Store Connect API 中宣布新指標后,我決定發起一個拉取請求,重新生成 App Store Connect Swift SDK 中的 Swift 接口,以包含使用最新的 App Store Connect 3.4 開放 API 規范的新端點。
這些更改已合并并發布到 SDK 的 3.2.0 版本中,這也是我們在本文中使用的版本。
要安裝 App Store Connect Swift SDK,你只需將其添加為包清單文件的依賴項即可,Package.swift 配置如下:
// swift-tools-version: 5.10import PackageDescriptionlet package = Package(name: "ASCAnalytics",platforms: [.macOS(.v13)],dependencies: [.package(url: "https://github.com/AvdLee/appstoreconnect-swift-sdk.git", exact: "3.2.0")],targets: [.executableTarget(name: "ASCAnalytics", dependencies: [.product(name: "AppStoreConnect-Swift-SDK", package: "appstoreconnect-swift-sdk")]),]
)
配置 API Swift SDK
配置 App Store Connect API Swift SDK
現在 SDK 已安裝,我們只需要使用 App Store Connect API 密鑰對其進行配置,ASCAnalytics.swift 文件配置如下:
import AppStoreConnect_Swift_SDK
import Foundationlet configuration = try! APIConfiguration(issuerID: "🙈",privateKeyID: "🙈",privateKey: "🙈"
)let provider = APIProvider(configuration: configuration)
生成分析報告
要訪問新指標,你需要首先為特定應用程序生成報告請求。這可以通過獲取你要為其生成報告的應用程序的 ID,然后向 /v1/analyticsReportRequests
端點發出 POST
請求來完成。
ASCAnalytics.swift 代碼如下:
// MARK: - Get the ID of the app
// https://api.appstoreconnect.apple.com/v1/apps?sort=bundleId&fields%5Bapps%5D=name
let request = APIEndpoint.v1.apps.get(parameters: .init(sort: [.bundleID], fieldsApps: [.name]))let appsResponse = try await provider.request(request)
let qreateAppId = appsResponse.data.first { $0.attributes?.name == "QReate - QR code generator" }.map { $0.id }guard let qreateAppId else { exit(1) }// MARK: - Create a new Report Request
let relationships = AnalyticsReportRequestCreateRequest.Data.Relationships(app: .init(data: .init(type: .apps, id: qreateAppId))
)
let attributes = AnalyticsReportRequestCreateRequest.Data.Attributes(accessType: .ongoing)
let data = AnalyticsReportRequestCreateRequest.Data(type: .analyticsReportRequests,attributes: attributes,relationships: relationships
)
let createRequest = AnalyticsReportRequestCreateRequest(data: data)
// https://api.appstoreconnect.apple.com/v1/analyticsReportRequests
let requestReport = APIEndpoint.v1.analyticsReportRequests.post(createRequest)_ = try await provider.request(requestReport)
盡管看起來似乎很復雜,但 POST
請求的有效負載非常簡單。我們只需將要為其生成報告的應用程序的 ID 指定為關系(在這種情況下是我的應用程序 QReate),以及報告的訪問類型。
訪問類型參數可以是以下兩個值之一:
.ongoing
:最常見的報告請求類型,為所有頻率的報告生成每日數據。.oneTimeSnapshot
:一次性報告請求,用于獲取歷史數據。
獲取所有可用的報告
進行 POST 請求后,我們可以定期檢查報告請求并檢索其所有可用的報告。如果我們只對特定類型的數據感興趣,可以通過類別(在這種情況下是應用使用情況)過濾到報告端點的請求。
ASCAnalytics.swift 代碼如下:
// MARK: - Read all available report requests for an app
// https://api.appstoreconnect.apple.com/v1/apps/6446048195/analyticsReportRequests?filter%5BaccessType%5D=ONE_TIME_SNAPSHOT,ONGOING&fields%5BanalyticsReportRequests%5D=accessType,reports,stoppedDueToInactivity&fields%5BanalyticsReports%5D=category,instances,name&include=reports
let readReportsRequest = APIEndpoint.v1.apps.id(qreateAppId).analyticsReportRequests.get(parameters: .init(filterAccessType: [.oneTimeSnapshot, .ongoing], fieldsAnalyticsReportRequests: [.accessType, .reports, .stoppedDueToInactivity], fieldsAnalyticsReports: [.category, .instances, .name], include: [.reports]))let allReports = try await provider.request(readReportsRequest).data// MARK: - Get all reports for a report request
guard let reportRequestId = allReports.first?.id else { exit(1) }
// https://api.appstoreconnect.apple.com/v1/analyticsReportRequests/105262f5-0cc0-4c4f-8eed-ff56509ee135/reports?filter%5Bcategory%5D=APP_USAGE
let reportInformation = APIEndpoint.v1.analyticsReportRequests.id(reportRequestId).reports.get(parameters: .init(filterCategory: [.appUsage]))let appUsageReports = try await provider.request(reportInformation)
這將返回該應用程序的所有可用的 APP USAGE
報告列表,然后我們可以按名稱檢索報告,以查看我們感興趣的數據。例如,讓我們獲取 App Crashes
報告的 ID,以便稍后使用它來檢索其數據。
ASCAnalytics.swift 代碼如下:
guard let crashesReportId = appUsageReports.data.filter({ $0.attributes?.name == "App Crashes" }).first?.id else {exit(1)
}
獲取報告的分段
不幸的是,App Store Connect API 不會直接返回報告的數據。相反,它將數據分割成實例,這些實例是根據可用的粒度(每日、每周或每月)生成的。
而每個實例又包含多個分段,每個分段都包含一系列用于下載報告數據的 URL。
現在,讓我們獲取報告實例的所有分段。
ASCAnalytics.swift 代碼如下:
// MARK: - Get the information for a report
// https://api.appstoreconnect.apple.com/v1/analyticsReports/r2-105262f5-0cc0-4c4f-8eed-ff56509ee135/instances
let instances = APIEndpoint.v1.analyticsReports.id(crashesReportId).instances.get()
let instancesResponse = try await provider.request(instances)
guard let instanceId = instancesResponse.data.first?.id else { exit(1) }// MARK: - Get segments
// https://api.appstoreconnect.apple.com/v1/analyticsReportInstances/3472b36d-b349-41e5-8ff2-25967428947b/segments?fields%5BanalyticsReportSegments%5D=url,checksum,sizeInBytes
let segments = APIEndpoint.v1.analyticsReportInstances.id(instanceId).segments.get(fieldsAnalyticsReportSegments: [.url, .checksum, .sizeInBytes])
let segmentsResponse = try await provider.request(segments)
下載分段的數據
最后,讓我們使用分段實體的 url 屬性下載報告數據,并將其寫入我們稍后可以讀取的文件中。
ASCAnalytics.swift 代碼如下:
// MARK: - Download segment file
guard let segmentURL = segmentsResponse.data.first?.attributes?.url else { exit(1) }let (location, downloadFileResponse) = try await URLSession.shared.download(from: segmentURL)
guard let httpResponse = downloadFileResponse as? HTTPURLResponse,httpResponse.statusCode == 200 else {exit(1)
}try FileManager.default.moveItem(at: location,to: URL.desktopDirectory.appending(component: "crashes.zip"))
完成上述所有步驟后,我們的桌面上應該會有一個名為 crashes.zip
的文件,解壓后其中將包含應用崩潰報告的數據文件:
crashes 文件內容如下:
Date App Name App Apple Identifier App Version Device Platform Version Crashes Unique Devices
2024-01-15 QReate - QR-code generator 6446048195 1.0.4 Desktop macOS 13.6 1 1
2024-01-15 QReate - QR-code generator 6446048195 1.0.4 Desktop macOS 14.2 4 4
總結
本文介紹了蘋果最新推出的多個新的分析報告,其中包含數百個新的數據點和指標,幫助開發者了解其應用程序的表現情況。這些報告涵蓋了諸如應用商店參與度、商業情況、應用使用情況、框架使用情況和性能等方面的數據。然而,這些數據僅通過 App Store Connect API提供,并且檢索數據的方式并不直觀。展示了如何使用 Antoine Van Der Lee 的 App Store Connect Swift SDK 訪問這些新指標,包括安裝 API Swift SDK、配置 API Swift SDK、生成分析報告、獲取所有可用報告以及下載報告數據。