Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 App Store Connect API 生成和读取分析报告

使用 App Store Connect API 生成和读取分析报告

原创
作者头像
Swift社区
发布于 2024-07-30 02:48:02
发布于 2024-07-30 02:48:02
2730
举报
文章被收录于专栏:Swift社区Swift社区

前言

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
AI代码解释
复制
// swift-tools-version: 5.10

import PackageDescription

let 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 文件配置如下:

代码语言:swift
AI代码解释
复制
import AppStoreConnect_Swift_SDK
import Foundation

let configuration = try! APIConfiguration(
    issuerID: "🙈",
    privateKeyID: "🙈",
    privateKey: "🙈"
)

let provider = APIProvider(configuration: configuration)

生成分析报告

要访问新指标,你需要首先为特定应用程序生成报告请求。这可以通过获取你要为其生成报告的应用程序的 ID,然后向 /v1/analyticsReportRequests 端点发出 POST 请求来完成。

ASCAnalytics.swift 代码如下:

代码语言:swift
AI代码解释
复制
// 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 代码如下:

代码语言:swift
AI代码解释
复制
// 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 代码如下:

代码语言:swift
AI代码解释
复制
guard let crashesReportId = appUsageReports.data
    .filter({ $0.attributes?.name == "App Crashes" })
    .first?.id else {
    exit(1)
}

获取报告的分段

不幸的是,App Store Connect API 不会直接返回报告的数据。相反,它将数据分割成实例,这些实例是根据可用的粒度(每日、每周或每月)生成的。

而每个实例又包含多个分段,每个分段都包含一系列用于下载报告数据的 URL。

现在,让我们获取报告实例的所有分段。

ASCAnalytics.swift 代码如下:

代码语言:swift
AI代码解释
复制
// 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 代码如下:

代码语言:swift
AI代码解释
复制
// 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 文件内容如下:

代码语言:crashes
AI代码解释
复制
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、生成分析报告、获取所有可用报告以及下载报告数据。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用 App Store Connect API 批量创建内购商品
我们去年开源 AppleParty(苹果派) 用于批量应用内购商品的创建和更新的方案,具体的技术方案是使用 XML Feed 格式来处理。而今年苹果在 WWDC22 宣布,2022 年 11 月开始,不再允许使用 XML 方式上传元数据和内购商品。
37手游iOS技术运营团队
2022/12/30
5.2K1
使用 App Store Connect API 批量创建内购商品
使用 App Store Connect API v2.3 管理 App Store 新定价机制
我们在上一篇文章 《App Store 新定价机制》讲解了苹果新定价升级,本文接着来讲解一下新 App Store Connect API v2.3 的使用示例。
37手游iOS技术运营团队
2023/04/10
4.1K0
使用 App Store Connect API v2.3 管理 App Store 新定价机制
AppleParty(苹果派)v3 支持 App Store 新定价机制 - 批量配置自定价格和销售范围
大家好!我们又见面啦,我们在上篇文章《使用 App Store Connect API v2.3 管理 App Store 新定价机制》讲解了关于 App Store 新定价机制 API 的介绍。但当时没有对 API 之间的关系性和联动进行介绍,有接口也不知道怎么串联起来使用。所以本文将详细介绍 App Store Connect API v2.3 如何实现批量配置自定价格和销售范围等。
37手游iOS技术运营团队
2023/04/27
1.4K0
AppleParty(苹果派)v3 支持 App Store 新定价机制 - 批量配置自定价格和销售范围
WWDC21 - App Store Server API 实践总结
大家好,我们在去年在 WWDC21 后 6 月 17 日发表了总结文章《苹果iOS内购三步曲 - WWDC21》。当时只是根据苹果的演讲内容进行了梳理,当时的很多接口和功能并没有上线,比如根据玩家的发票订单号查询用户的苹果收据,查询历史订单接口等,当时文章并没有深入的分析,而如今都 2022 年了,苹果 App Store Server API 已经上线,所以,今天我们一起来了解一下,相关 API 的具体使用实践吧~
37手游iOS技术运营团队
2022/01/25
12.1K1
WWDC21 - App Store Server API 实践总结
开源一款苹果 macOS 工具 - AppleParty(苹果派)
大家好,很高兴告诉大家一件重要的事情,我们发起了一个开源项目 —— AppleParty(苹果派)(苹果派)。这是我们团队在上一个 开源的 App Store 后又一个尝试。AppleParty 这个项目是我们 37手游 iOS 团队内部孵化的一个产品,希望这个项目能作为一个引子,通过开源与大家分享成果,一起提高效率和拓展大家对未来的探索方向。
37手游iOS技术运营团队
2022/03/31
2K0
开源一款苹果 macOS 工具 -  AppleParty(苹果派)
谈一谈 IPA 上传到 App Store Connect 的几种方法
当然,Xcode 这种方式,是需要有源代码情况下,才能上传。所以,就会有没有源代码的情况,怎么上传的情况啦!​
iOS程序应用
2022/12/09
1.4K0
谈一谈 IPA 上传到 App Store Connect 的几种方法
关于上传 ipa 包到 App Store Connect 的方法,相信有 iOS 开发经验的同学,一定知道完成 App 开发后,一般都是用 Xcode 的 Archive 打包后上传到苹果后台。所以,这个就是今天要写的水文?显示不是吧!答案肯定不是啊,本文将给大家一个相对全面介绍。苹果开发的知识点非常多,官方文档也很多,能够学好学完,不一定人人能够做到。在我的理解,iOS进阶,不是说你必须掌握很高深的技术,而是了解全面的知识,能够做出不一样的产品、体验,这个才是优秀的开发者!
iOS Magician
2023/03/22
3.5K0
没有MAC电脑,如何申请苹果开发证书、上架APP Store?
开发者账号的申请和应用标识符的配置等,不就在这里赘述了,这些可以搜索到大量完整细致的介绍文档,也可以直接参考uni-app的指定文档https://ask.dcloud.net.cn/article/152,在这里主要介绍如何在windows环境下申请证书和上传ipk安装包。
alphaair
2024/07/02
5630
macOS 应用公证 - 让用户信赖你的应用
macOS 下 AppStore 不是唯一能下载 App 的渠道,做为应用的开发者,我们也能把应用发布在网站上提供给用户下载安装。那么,我们如何让用户信任我们开发的软件呢?对此,苹果提供了公证的服务和结合操作系统的Gatekeeper,给用户提供了一层信心的保障。本文将介绍三种不同公证方式的选择。
ethanlin
2022/10/26
4.1K0
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
在苹果内购开发中,你可能会涉及到获取不同类型的“密钥”,以满足安全验证和开发的需求。以下介绍常见的获取方式:
卓伊凡
2025/03/21
2720
WWDC22 - In App Purchase 更新总结
WWDC21 是历年来 In App Purchase(IAP,内购内购买)最大的变化,分别推出了 StoreKit 2、App Store Server API、App Store Server Notifications V2 三大特性,去年我们也编写了 《苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!--- WWDC21》 文章,所以我们本文不会再深入提及去年的更新,大家如果不太熟悉,可以先温习一下。本文将对今年 WWDC22 带来的变化,从整体的视角一起回顾。
37手游iOS技术运营团队
2022/07/11
5.1K0
WWDC22 - In App Purchase 更新总结
Elasticsearch API汇总
描述:health是一个简洁的,一行表示了来自/_cluster/health的相同的信息。
HLee
2020/12/28
1.2K0
Elasticsearch API汇总
用 SwiftUI 实现一个开源的 App Store
App Store 一直以来都是 iPhone 生态的最重要一环,在初代 iPhone 商店,因为 App 比较少,当时就有 Top 25 榜单:
Swift社区
2022/02/09
1.9K0
用 SwiftUI 实现一个开源的 App Store
在APICloud开发平台使用友盟统计功能教程
APICloud开发平台模块库中的umAnalytics模块封装了友盟APP统计SDK。实现了友盟统计功能,包括启动次数、事件、页面等app数据的统计。
APICloud官方
2022/04/08
6470
开发一款简易APP
如果在arm架构的 Mac 电脑上进行开发,需要安装 Rosetta 2, 因为一些辅助工具需要,可通过手动运行下面的命令来安装:
fliter
2024/05/10
2400
开发一款简易APP
关于ios:上传了ipa但iTunes-Connect没有构建版本问题​
HBuilderX 版本:2.3.3,对应的 SDK 版本:2.3.3,Xcode 版本:10.1​
iOS程序应用
2023/04/17
5360
关于ios:上传了ipa但iTunes-Connect没有构建版本问题​
Sitecore 8.2 扩展体验分析报告
本文简要介绍了如何为Experience Analytics创建自定义报告。在Sitecore术语中,我会说:创建新的报表维度和适当的报表以显示它们。
jack.yang
2025/04/05
700
Sitecore 8.2 扩展体验分析报告
苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!--- WWDC21
如果大家的 App 有使用 IAP 功能,那么可能会遇到用户反馈苹果充值成功,但是服务没有到账的情况,用户一般会提供这样的苹果收据:
37手游iOS技术运营团队
2021/06/18
14.3K2
苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!--- WWDC21
应用程序内购买教程:入门
更新说明:Pietro Rea为Xcode 10,Swift 4.2和iOS 11/12更新了本教程。Ray Wenderlich写了原文。
iOSDevLog
2018/08/22
5.8K0
应用程序内购买教程:入门
使用最新的 Flutter SDK 3.22.1 构建 HarmonyOS 应用
大家都知道目前鸿蒙的开源 tpc 和 sig 仓都迁移到了 gitcode 平台了,本次更新对 Flutter SDK 也有所涉及,所以我们就用最新的 Flutter SDK 来一起看一下如何构建 HarmonyOS 应用
徐建国
2025/04/11
4810
使用最新的 Flutter SDK 3.22.1 构建 HarmonyOS 应用
推荐阅读
相关推荐
使用 App Store Connect API 批量创建内购商品
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档