golang实现AppStore Connect API非官方SDK插件库appstore-sdk-go的使用
Golang实现AppStore Connect API非官方SDK插件库appstore-sdk-go的使用
描述
这是一个非官方的Golang SDK,用于访问AppStore Connect API。
安装
go get -u github.com/kachit/appstore-sdk-go
使用示例
初始化客户端
package main
import (
"fmt"
"time"
appstore_sdk "github.com/kachit/appstore-sdk-go"
)
func main(){
cfg := appstore_sdk.NewConfig("Issuer Id", "Key Id", "Vendor No", "path/to/your/private.key")
client := appstore_sdk.NewClientFromConfig(cfg, nil)
// 构建认证token
err := client.Init()
if err != nil {
fmt.Printf("Wrong API client init " + err.Error())
panic(err)
}
}
获取销售报告
ctx := context.Background()
date, _ := time.Parse("2006-01-02", "2020-05-05")
filter := appstore_sdk.NewSalesReportsFilter()
filter.SubTypeSummary().Version10().Daily().SetReportDate(date)
result, resp, err := client.SalesReports().GetSalesReports(ctx, filter)
if err != nil {
fmt.Printf("Wrong API request " + err.Error())
panic(err)
}
// 打印原始响应
fmt.Println(resp)
// 打印结果数据
fmt.Println(result.Data[0].Provider)
fmt.Println(result.Data[0].ProviderCountry)
fmt.Println(result.Data[0].SKU)
fmt.Println(result.Data[0].Developer)
fmt.Println(result.Data[0].Title)
fmt.Println(result.Data[0].Version)
获取订阅报告
ctx := context.Background()
date, _ := time.Parse("2006-01-02", "2020-05-05")
filter := appstore_sdk.NewSubscriptionsReportsFilter()
filter.SubTypeSummary().Version12().Daily().SetReportDate(date)
result, resp, err := client.SalesReports().GetSubscriptionsReports(ctx, filter)
if err != nil {
fmt.Printf("Wrong API request " + err.Error())
panic(err)
}
// 打印结果数据
fmt.Println(result.Data[0].AppName)
fmt.Println(result.Data[0].AppAppleID.Value())
fmt.Println(result.Data[0].SubscriptionName)
获取订阅事件报告
ctx := context.Background()
date, _ := time.Parse("2006-01-02", "2020-05-05")
filter := appstore_sdk.NewSubscriptionsEventsReportsFilter()
filter.SubTypeSummary().Version12().Daily().SetReportDate(date)
result, resp, err := client.SalesReports().GetSubscriptionsEventsReports(ctx, filter)
if err != nil {
fmt.Printf("Wrong API request " + err.Error())
panic(err)
}
// 打印结果数据
fmt.Println(result.Data[0].EventDate.Value().Format(CustomDateFormatDefault))
fmt.Println(result.Data[0].Event)
fmt.Println(result.Data[0].AppName)
获取预购报告
ctx := context.Background()
date, _ := time.Parse("2006-01-02", "2020-05-05")
filter := appstore_sdk.NewPreOrdersReportsFilter()
filter.SubTypeSummary().Version10().Daily().SetReportDate(date)
result, resp, err := client.SalesReports().GetPreOrdersReports(ctx, filter)
if err != nil {
fmt.Printf("Wrong API request " + err.Error())
panic(err)
}
// 打印结果数据
fmt.Println(result.Data[0].Provider)
fmt.Println(result.Data[0].Title)
fmt.Println(result.Data[0].SKU)
获取财务报告
ctx := context.Background()
date, _ := time.Parse("2006-01-02", "2020-05-05")
filter := appstore_sdk.NewFinancesReportsFilter()
filter.SetReportDate(date).SetRegionCode("US")
result, resp, err := client.FinancesReports().GetFinancialReports(ctx, filter)
if err != nil {
fmt.Printf("Wrong API request " + err.Error())
panic(err)
}
// 打印结果数据
fmt.Println(result.Data[0].StartDate.Value().Format(CustomDateFormatDefault))
fmt.Println(result.Data[0].EndDate.Value().Format(CustomDateFormatDefault))
fmt.Println(result.Data[0].UPC)
以上示例展示了如何使用appstore-sdk-go库与AppStore Connect API进行交互,包括获取销售报告、订阅报告、财务报告等各种类型的数据。每个示例都包含了初始化、请求构建和结果处理的完整流程。
更多关于golang实现AppStore Connect API非官方SDK插件库appstore-sdk-go的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang实现AppStore Connect API非官方SDK插件库appstore-sdk-go的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用appstore-sdk-go实现AppStore Connect API
appstore-sdk-go是一个非官方的Golang SDK,用于与App Store Connect API交互。下面我将介绍如何使用这个库来管理你的App Store应用。
安装
首先安装这个库:
go get github.com/k0kubun/appstore-sdk-go
基本配置
在使用之前,你需要从App Store Connect获取API密钥:
- 登录App Store Connect
- 进入"用户和访问" > “密钥”
- 创建新的API密钥
- 下载私钥文件(.p8)
package main
import (
"context"
"fmt"
"log"
"time"
appstore "github.com/k0kubun/appstore-sdk-go"
)
func main() {
// 配置API客户端
cfg := appstore.Config{
IssuerID: "YOUR_ISSUER_ID", // 从App Store Connect获取
KeyID: "YOUR_KEY_ID", // 从.p8文件名或密钥页面获取
PrivateKey: []byte("YOUR_PRIVATE_KEY_CONTENT"), // .p8文件内容
}
client, err := appstore.NewClient(cfg)
if err != nil {
log.Fatalf("创建客户端失败: %v", err)
}
ctx := context.Background()
// 下面可以使用client调用各种API
}
常用功能示例
1. 获取应用列表
func listApps(client *appstore.Client, ctx context.Context) {
apps, _, err := client.Apps.List(ctx, nil)
if err != nil {
log.Fatalf("获取应用列表失败: %v", err)
}
fmt.Println("应用列表:")
for _, app := range apps {
fmt.Printf("- %s (ID: %s, BundleID: %s)\n",
app.Attributes.Name,
app.ID,
app.Attributes.BundleID)
}
}
2. 获取应用版本信息
func listAppVersions(client *appstore.Client, ctx context.Context, appID string) {
versions, _, err := client.AppVersions.List(ctx, appID, nil)
if err != nil {
log.Fatalf("获取应用版本失败: %v", err)
}
fmt.Println("应用版本:")
for _, version := range versions {
fmt.Printf("- 版本: %s, 状态: %s\n",
version.Attributes.VersionString,
version.Attributes.AppStoreState)
}
}
3. 创建新版本
func createNewVersion(client *appstore.Client, ctx context.Context, appID string) {
newVersion := &appstore.AppVersionCreateRequest{
Data: appstore.AppVersionCreateRequestData{
Type: "appStoreVersions",
Attributes: appstore.AppVersionAttributes{
Platform: appstore.PlatformIOS,
VersionString: "1.1.0",
Copyright: "2023 Your Company",
},
Relationships: appstore.AppVersionRelationships{
App: appstore.Relationship{
Data: appstore.RelationshipData{
Type: "apps",
ID: appID,
},
},
},
},
}
version, _, err := client.AppVersions.Create(ctx, newVersion)
if err != nil {
log.Fatalf("创建新版本失败: %v", err)
}
fmt.Printf("成功创建新版本: %s (ID: %s)\n",
version.Attributes.VersionString,
version.ID)
}
4. 提交应用审核
func submitForReview(client *appstore.Client, ctx context.Context, versionID string) {
submission := &appstore.AppStoreVersionSubmissionCreateRequest{
Data: appstore.AppStoreVersionSubmissionCreateRequestData{
Type: "appStoreVersionSubmissions",
Relationships: appstore.AppStoreVersionSubmissionRelationships{
AppStoreVersion: appstore.Relationship{
Data: appstore.RelationshipData{
Type: "appStoreVersions",
ID: versionID,
},
},
},
},
}
_, _, err := client.AppStoreVersionSubmissions.Create(ctx, submission)
if err != nil {
log.Fatalf("提交审核失败: %v", err)
}
fmt.Println("应用已成功提交审核")
}
高级用法
处理分页
func listAllAppsWithPaging(client *appstore.Client, ctx context.Context) {
pageSize := 10
options := &appstore.AppsListOptions{
Limit: &pageSize,
}
var allApps []appstore.App
for {
apps, resp, err := client.Apps.List(ctx, options)
if err != nil {
log.Fatalf("获取应用列表失败: %v", err)
}
allApps = append(allApps, apps...)
if resp.Links.Next == "" {
break
}
// 设置下一页的cursor
options.Cursor = resp.Links.NextCursor()
time.Sleep(500 * time.Millisecond) // 避免速率限制
}
fmt.Printf("总共获取了%d个应用\n", len(allApps))
}
错误处理
func handleErrors(client *appstore.Client, ctx context.Context) {
_, resp, err := client.Apps.List(ctx, nil)
if err != nil {
if apiErr, ok := err.(*appstore.APIError); ok {
fmt.Printf("API错误: 状态码%d, 标题: %s\n",
apiErr.StatusCode,
apiErr.Title)
if apiErr.StatusCode == 429 {
retryAfter := resp.Header.Get("Retry-After")
fmt.Printf("达到速率限制,请在%s秒后重试\n", retryAfter)
}
} else {
log.Fatalf("非API错误: %v", err)
}
return
}
}
注意事项
- 速率限制:App Store Connect API有严格的速率限制(约50请求/分钟),需要适当控制请求频率
- 密钥安全:妥善保管你的私钥文件,不要在代码库中直接提交
- 权限:确保API密钥有足够的权限执行所需操作
- 错误处理:所有API调用都可能返回错误,必须妥善处理
- 缓存:考虑对不常变化的数据实现缓存机制
这个非官方SDK提供了对App Store Connect API的便捷访问,但请注意它可能不包含所有API功能。如果需要更全面的功能,你可能需要直接使用官方的REST API或考虑其他更完整的SDK。