Google Play 自定义应用发布 API,用于在 C# 中发布专用应用



我正在尝试弄清楚如何使用Google Play自定义应用发布API使用 C# 发布专用应用程序,但我无法找到上传或通过 APK 的方法。

这里的文档给出了如何做到这一点的示例:

Path apkPath = Paths.get("PATH_TO_APK");
ByteArrayContent apk =
    new ByteArrayContent("application/octet-stream", Files.readAllBytes(apkPath));
CustomApp appMetadata =
    new CustomApp()
      .setTitle("APPLICATION TITLE").setLanguageCode("en_US");
CustomApps.Create request =
    apiClient.accounts() // Playcustomapp apiClient
      .customApps().create(DEV_ACCOUNT_ID, appMetadata, apk);
CustomApp response = request.execute();

我已经导入了 NuGet 包Google.Apis.Playcustomapp.v1并创建了应用元数据

CustomApp appMetadata = new CustomApp() {
    Title = "Whatsapp",
    LanguageCode = "en-US"
};

有 2 个可用的 API 请求,它们是:

var createRequest = new AccountsResource.CustomAppsResource.CreateRequest(
    service, appMetadata, 9197907806840XXXXX);
var createMediaUpload = new AccountsResource.CustomAppsResource.CreateMediaUpload(
    service, appMetadata, 9197907806840XXXXX, ms, "application /octet-stream");

两者都给了我错误 404。这是因为我没有通过需要上传的APK。我可以从哪里发送此APK?CreateMediaUpload中有一个stream参数,但它也没有帮助。

错误:

CreateRequest:解析值时遇到意外字符:<。路径"。如何在此处传递APK路径?

CreateMediaUpload:在此服务器上找不到请求的 URL /upload/9197907806840917992/customApps?uploadType=resumable

有人可以帮助我吗?

您找到的文档是一个 Java 示例。在随机猜测如何把这些碎片放在一起之后,我终于明白了。

请记住,对于您每天创建专用应用程序的频率,有一些神奇的未记录限制。每天大约 15 个应用程序。之后,您达到该限制,您将收到以下消息错误:

apk通知消息密钥已达到上传限制

static void Main(string[] args)
    {
        MainAsync(args).GetAwaiter().GetResult();
    }
    static async Task MainAsync(string[] args)
    {
        var email = "yourserviceaccountmail";
        ServiceAccountCredential credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(email)
            {
                Scopes = new[] { PlaycustomappService.Scope.Androidpublisher }
            }.FromPrivateKey("client_secrets.json"));
        CustomApp appMetadata = new CustomApp();
        appMetadata.Title = "YOUR APP";
        appMetadata.LanguageCode = "en_US";
        // Create the service.
        var service = new PlaycustomappService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Custom Apps API Sample",
        });
        var acc = new AccountsResource(service);
        using (var stream = new FileStream("app-release.apk", FileMode.Open))
        {
            long devIAccountd = 12345678L;
            var app = acc.CustomApps.Create(appMetadata, devIAccountd, stream, "application/octet-stream");
            var response = await app.UploadAsync();
            if (response.Exception != null)
            {
                Console.WriteLine("Someting went wrong:");
                Console.WriteLine(response.Exception.Message);
            }
            if (response.Status == Google.Apis.Upload.UploadStatus.Completed)
            {
                Console.WriteLine("Succeeded!");
            }
        }
    }

最新更新