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密钥:

  1. 登录App Store Connect
  2. 进入"用户和访问" > “密钥”
  3. 创建新的API密钥
  4. 下载私钥文件(.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
	}
}

注意事项

  1. 速率限制:App Store Connect API有严格的速率限制(约50请求/分钟),需要适当控制请求频率
  2. 密钥安全:妥善保管你的私钥文件,不要在代码库中直接提交
  3. 权限:确保API密钥有足够的权限执行所需操作
  4. 错误处理:所有API调用都可能返回错误,必须妥善处理
  5. 缓存:考虑对不常变化的数据实现缓存机制

这个非官方SDK提供了对App Store Connect API的便捷访问,但请注意它可能不包含所有API功能。如果需要更全面的功能,你可能需要直接使用官方的REST API或考虑其他更完整的SDK。

回到顶部