# Fastlane Spaceship 数据采集 Demo
以下是通过 **Fastlane Spaceship** 自动获取 App Store Connect 销售数据的完整指南:
---
## 环境准备
### 1. 安装 Fastlane
```bash
# 需要 Ruby 2.5 或更高版本
gem install fastlane -NV
脚本实现
2. 创建 appstore_data_demo.rb
require 'spaceship'
require 'date'
require 'json'
# 配置凭证(建议使用环境变量)
APPLE_ID = ENV['APPSTORE_ID'] || "your_apple_id@example.com"
PASSWORD = ENV['APPSTORE_PWD'] || "your_app_specific_password"
def login
Spaceship::Tunes.login(APPLE_ID, PASSWORD)
Spaceship::Tunes.select_team if Spaceship::Tunes.client.teams.count > 1
end
def fetch_sales_data(date)
start_date = Date.parse(date)
end_date = start_date
all_apps = Spaceship::Tunes::Application.all
app = all_apps.first
analytics_data = Spaceship::Tunes.client.get_analytics_data(
app_id: app.apple_id,
start_date: start_date.strftime("%Y-%m-%d"),
end_date: end_date.strftime("%Y-%m-%d"),
measures: ['installs', 'sales', 'refunds', 'iap'],
frequency: 'DAILY'
)
JSON.parse(analytics_data.body)['results'] || []
end
begin
login
target_date = (Date.today - 3).strftime("%Y-%m-%d") # 数据延迟 2 天
sales_data = fetch_sales_data(target_date)
if sales_data.empty?
puts "⚠️ No data for #{target_date}"
else
File.write("sales_#{target_date}.json", JSON.pretty_generate(sales_data))
puts "✅ Saved #{sales_data.size} records to sales_#{target_date}.json"
end
rescue => e
puts "❌ Error: #{e.message}"
end
运行说明
3. 执行脚本
# 直接运行
ruby appstore_data_demo.rb
# 使用环境变量(推荐)
APPSTORE_ID="your_id" APPSTORE_PWD="your_pwd" ruby appstore_data_demo.rb
数据处理示例
4. 解析 JSON 输出
import json
with open('sales_2023-10-01.json') as f:
data = json.load(f)
for item in data:
print(f"Date: {item['date']}")
print(f"App: {item['appName']}")
print(f"Revenue: ${item['developerProceeds']:.2f}")
print(f"Refunds: {item['refunds']}\n")
关键配置项
参数 | 说明 |
---|---|
measures |
指标类型:installs/sales/refunds |
frequency |
数据粒度:DAILY/HOURLY |
start_date |
数据开始日期(YYYY-MM-DD) |
app.apple_id |
目标应用的唯一标识符 |
注意事项
⚠️ 权限要求
需在 App Store Connect 中分配 Sales 或 Analytics 权限⚠️ 数据延迟
当日(T)数据需在 T+3 日获取(例如 10/1 数据 10/4 可用)⚠️ 接口稳定性
此脚本依赖苹果未公开 API,重大更新后可能失效