【发布时间】:2019-06-11 06:54:51
【问题描述】:
我正在尝试弄清楚如何使用 Google Play 自定义应用发布 API 使用 C# 发布私有应用程序,但我无法找到上传或传递 APK 的方法。
文档here 给出了一个示例:
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 并创建了 appMetaData
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。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
这里的
ms是什么?它是一个 MemoryStream 吗?我想知道你是否在写完之后没有把它倒回来?也不清楚9197907806840XXXXX是什么,因为这不是一个有效的方法参数——而且目前你的内容类型中有一个流氓空间,这也可能没有帮助。 -
@JonSkeet 是的
ms是一个流,它具有byteArray的APK。9197907806840XXXXX是我的 google 开发者帐户,它是必需的参数。并且在复制,粘贴时添加了空间。它不存在于我的代码中。流代码:ByteArrayContent apk = new ByteArrayContent(File.ReadAllBytes(@"C:\Users\lucky\Desktop\app-release.apk")); System.IO.MemoryStream ms = new System.IO.MemoryStream(); apk.CopyToAsync(ms); -
对,正如我所想的那样 - 这是一个 MemoryStream,如果你从中读取它就不会有任何内容。您已写入,但光标位于流的末尾。如果你使用
ms.Position = 0;,它会倒带,所以有内容要上传。 -
(恐怕我对这个特定的 API 一无所知。我只是想发现潜在的问题。)
-
@JonSkeet 啊,是的,我现在确实设置了
ms.Position=0,但仍然没有帮助。得到同样的错误。感谢您的投入
标签: c# android google-cloud-platform google-play google-play-developer-api