使用 App Store Connect API 生成和讀取分析報告

在這里插入圖片描述

在這里插入圖片描述

文章目錄

    • 前言
    • 安裝 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、生成分析報告、獲取所有可用報告以及下載報告數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39115.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

構建安全穩定的應用:Spring Security 實用指南

前言 在現代 Web 應用程序中,安全性是至關重要的一個方面。Spring Security 作為一個功能強大且廣泛使用的安全框架,為 Java 應用程序提供了全面的安全解決方案。本文將深入介紹 Spring Security 的基本概念、核心功能以及如何在應用程序中使用它來實現…

相比共享代理,為什么要用獨享代理IP?

隨著互聯網的廣泛普及和應用,涉及網絡隱私、數據安全和網絡訪問控制的問題變得越來越重要。代理服務器作為一種常見的網絡工具,可以在跨境電商、海外社媒、SEO投放、網頁抓取等領域發揮作用,實現匿名訪問并加強網絡安全。在代理服務器類別中&…

Hadoop:全面深入解析

Hadoop是一個用于大規模數據處理的開源框架,其設計旨在通過集群的方式進行分布式存儲和計算。本篇博文將從Hadoop的定義、架構、原理、應用場景以及常見命令等多個方面進行詳細探討,幫助讀者全面深入地了解Hadoop。 1. Hadoop的定義 1.1 什么是Hadoop …

CDC模型

引言 聚類是一種強大的機器學習方法,用于根據特征空間中元素的接近程度發現相似的模式。它廣泛用于計算機科學、生物科學、地球科學和經濟學。盡管已經開發了最先進的基于分區和基于連接的聚類方法,但數據中的弱連接性和異構密度阻礙了其有效性。在這項…

Linux 下的性能監控與分析技巧

在日常的服務器管理和問題診斷過程中,Linux 命令行工具提供了強大的支持。本文通過幾個常用的示例,介紹如何快速定位問題、監控服務器性能。 無論你是編程新手還是有一定經驗的開發者,理解和掌握這些命令,都將在你的工作中大放異…

第四篇——作戰篇:戰爭里的激勵與成本

目錄 一、背景介紹二、思路&方案三、過程1.思維導圖2.文章中經典的句子理解3.學習之后對于投資市場的理解4.通過這篇文章結合我知道的東西我能想到什么? 四、總結五、升華 一、背景介紹 前面進行了分析之后,這篇顯然又從經濟的角度進行了介紹和分析…

STELLA系統動態模擬技術及在農業、生態及環境等科學領域中的應用技術

STELLA是一種用戶友好的計算機軟件。通過繪畫出一個系統的形象圖形,并給這個系統提供數學公式和輸入數據,從而建立模型。依據專業興趣,STELLA可以用來建立各種各樣的農業、生態、環境等方面的系統動態模型,為科研、教學、管理服務…

用例子和代碼了解詞嵌入和位置編碼

1.嵌入(Input Embedding) 讓我用一個更具體的例子來解釋輸入嵌入(Input Embedding)。 背景 假設我們有一個非常小的詞匯表,其中包含以下 5 個詞: "I""love""machine"&qu…

10 Posix API與網絡協議棧

POSIX概念 POSIX是由IEEE指定的一系列標準,用于澄清和統一Unix-y操作系統提供的應用程序編程接口(以及輔助問題,如命令行shell實用程序),當您編寫程序以依賴POSIX標準時,您可以非常肯定能夠輕松地將它們移植到大量的Unix衍生產品系列中(包括Linux,但不限于此!)。 如…

DeepFaceLive----AI換臉簡單使用

非常強大的軟件,官方github https://github.com/iperov/DeepFaceLive 百度云鏈接: 鏈接:https://pan.baidu.com/s/1VHY-wxqJXSh5lCn1c4whZg 提取碼:nhev 1下載解壓軟件 下載完成后雙擊.exe文件進行解壓.完成后雙擊.bat文件打開軟件 2 視頻使用圖片換…

k8s部署單機版mysql8

一、創建命名空間 # cat mysql8-namespace.yaml apiVersion: v1 kind: Namespace metadata:name: mysql8labels:name: mysql8# kubectl apply -f mysql8-namespace.yaml namespace/mysql8 created# kubectl get ns|grep mysql8 mysql8 Active 8s二、創建mysql配…

Ubuntu環境下Graphics drawString 中文亂碼解決方法

問題描述 以下代碼在,在本地測試時 ,可以正常輸出中文字符的圖片,但部署到線上時中文亂碼 // 獲取Graphics2D對象以支持更多繪圖功能 Graphics2D g2d combined.createGraphics(); // 示例字體、樣式和大小 Font font new Font("微軟雅黑", Font.PLAI…

Swagger:swagger和knife4j

Swagger 一個規范完整的框架 用以生成,描述,調用和可視化 主要作用為 自動生成接口文檔 方便后端開發進行接口調試 Knife4j 為Java MVC框架集成 依賴引入: <!-- knife4j版接口文檔 訪問/doc.html--> <dependency><groupId>com.github.xiaoymin<…

SSM學習4:spring整合mybatis、spring整合Junit

spring整合mybatis 之前的內容是有service層&#xff08;業務實現層&#xff09;、dao層&#xff08;操作數據庫&#xff09;&#xff0c;現在新添加一個domain&#xff08;與業務相關的實體類&#xff09; 依賴配置 pom.xml <?xml version"1.0" encoding&quo…

解決ScaleBox來實現大屏自適應時,頁面的餅圖會變形的問題

封裝一個公用組件pieChartAdaptation.vue 代碼如下&#xff1a; <template><div :style"styleObject" class"pie-chart-adaptation"><slot></slot></div> </template><script setup lang"ts"> impo…

2.2.3 C#中顯示控件BDPictureBox 的實現----控件實現

2.2.3 C#中顯示控件BDPictureBox 的實現----控件實現 1 界面控件布局 2圖片內存Mat類說明 原始圖片&#xff1a;m_raw_mat ,Display_Mat()調用時更新或者InitDisplay_Mat時更新局部放大顯示圖片&#xff1a;m_extract_zoom_mat&#xff0c;更新scale和scroll信息后更新overla…

2024年精選100道軟件測試面試題(內含文檔)

測試技術面試題 1、我現在有個程序&#xff0c;發現在 Windows 上運行得很慢&#xff0c;怎么判別是程序存在問題還是軟硬件系統存在問題&#xff1f; 2、什么是兼容性測試&#xff1f;兼容性測試側重哪些方面&#xff1f; 3、測試的策略有哪些&#xff1f; 4、正交表測試用…

Eureka與Spring Cloud Bus的協同:打造智能服務發現新篇章

Eureka與Spring Cloud Bus的協同&#xff1a;打造智能服務發現新篇章 在微服務架構中&#xff0c;服務發現是實現服務間通信的關鍵機制。Eureka作為Netflix開源的服務發現框架&#xff0c;與Spring Cloud Bus的集成&#xff0c;提供了一種動態、響應式的服務治理解決方案。本文…

市場規模5萬億,護理員缺口550萬,商業護理企業如何解決服務供給難題?

干貨搶先看 1. 據統計&#xff0c;我國失能、半失能老人數量約4400萬&#xff0c;商業護理服務市場規模達5萬億。然而&#xff0c;當前養老護理員缺口巨大&#xff0c;人員的供需不匹配是很多養老服務企業需要克服的難題。 2. 當前居家護理服務的主要市場參與者分為兩類&…

利用GPT 將 matlab 內置 bwlookup 函數轉C

最近業務需要將 matlab中bwlookup 的轉C 這個函數沒有現成的m文件參考&#xff0c;內置已經打成庫了&#xff0c;所以沒有參考源代碼 但是它的解釋還是很清楚的&#xff0c;可以根據這個來寫 Nonlinear filtering using lookup tables - MATLAB bwlookup - MathWorks 中國 A…