文件与应用分发最佳实践

SendFile接口可用于将OSS文件上传到云手机的指定目录,或者通过应用安装包公网下载链接实现批量上传到云手机指定目录并自动安装。本文通过四个典型场景示例介绍如何使用该接口来分发文件和应用。

前提条件

  • 所有场景的通用前提条件:

    • 所有目标云手机实例属于同一个地域。

    • 所有目标云手机实例的状态为可用

  • 场景四(公网下载+内网分发模式)的特有前提条件:

    • 要传入的第一个云手机实例具备互联网访问权限。

    • 要传入的第一个云手机实例具备足够容纳待分发文件或应用的存储空间。

    • 您已提前开通对象存储 OSS(Object Storage Service)产品。该场景下,仅第一个云手机实例会从公网下载文件或应用,然后将其上传至您名下的同一地域下的OSS Bucket中。

      重要

      OSS存储将产生额外费用。关于计费详情,请参见计费概述

场景一:上传普通文件

场景示例

现有保存在杭州地域的OSS Bucket中的文件snapshot.png,需将其上传到杭州地域的云手机实例acp-c8rzmx8fnwba6****acp-5fc8mx8fnw9s5****的目录/sdcard/Pictures中。

SendFile接口调用示例

  • 请求报文

    {
        "AndroidInstanceIdList": [
            "acp-c8rzmx8fnwba6****",
            "acp-5fc8mx8fnw9s5****"
        ],
        "SourceFilePath": "/sdcard/Pictures",
        "UploadType": "OSS",
        "UploadUrl": "oss://cloudphone-saved-bucket-cn-hangzhou-****/picture/snapshot.png",
        "UploadEndpoint": "oss-cn-hangzhou-internal.aliyuncs.com"
    }
  • 响应报文

    {
      "TaskId": "t-gk0ahswe4blor****",
      "RequestId": "5D6FB544-F20E-14F8-B627-3F32C337****",
      "Data": [
        {
          "TaskId": "t-gk0ahswe4blor****",
          "AndroidInstanceId": "acp-c8rzmx8fnwba6****"
        },
        {
          "TaskId": "t-gk0ahswe4blor****",
          "AndroidInstanceId": "acp-5fc8mx8fnw9s5****"
        }
      ]
    }

场景二:上传应用安装包并自动安装应用

场景示例

现有保存在杭州地域的OSS Bucket中的应用安装包SogouInput_12.15.0_android_sweb.apk,需实现以下目标:

  1. 将其上传到杭州地域的云手机实例acp-c8rzmx8fnwba6****acp-5fc8mx8fnw9s5****的目录/sdcard/Download中。

  2. 将其重命名为sougou.apk

  3. 上传成功后自动安装该应用。

SendFile接口调用示例

  • 请求报文

    {
        "AndroidInstanceIdList": [
            "acp-c8rzmx8fnwba6****",
            "acp-5fc8mx8fnw9s5****"
        ],
        "SourceFilePath": "/sdcard/Download",
        "UploadType": "OSS",
        "UploadUrl": "oss://cloudphone-saved-bucket-cn-hangzhou-****/app/SogouInput_12.15.0_android_sweb.apk",
        "UploadEndpoint": "oss-cn-hangzhou-internal.aliyuncs.com",
        "TargetFileName": "sougou.apk",
        "AutoInstall": "true"
    }
  • 响应报文

    {
      "TaskId": "t-gk0ahswe4blor****",
      "RequestId": "5D6FB544-F20E-14F8-B627-3F32C337****",
      "Data": [
        {
          "TaskId": "t-gk0ahswe4blor****",
          "AndroidInstanceId": "acp-c8rzmx8fnwba6****"
        },
        {
          "TaskId": "t-gk0ahswe4blor****",
          "AndroidInstanceId": "acp-5fc8mx8fnw9s5****"
        }
      ]
    }

场景三:通过公网下载应用安装包并自动安装(公网逐一下载模式)

场景示例

现有某应用安装包的下载链接https://apkdl.example.com/wapdl/android/apk/SogouInput_12.15.0_android_sweb.apk,需实现以下目标:

  1. 杭州地域的云手机实例acp-c8rzmx8fnwba6****acp-5fc8mx8fnw9s5****分别从公网下载该安装包并保存到目录/sdcard/Download/中,同时重命名为sougou.apk

  2. 下载成功后自动安装应用。

SendFile接口调用示例

  • 请求报文

    {
        "AndroidInstanceIdList": [
            "acp-c8rzmx8fnwba6****",
            "acp-5fc8mx8fnw9s5****"
        ],
        "SourceFilePath": "/sdcard/Download/sougou.apk",
        "UploadType": "DOWNLOAD_URL",
        "UploadUrl": "https://apkdl.example.com/wapdl/android/apk/SogouInput_12.15.0_android_sweb.apk",
        "AutoInstall": "true"
    }
  • 响应报文

    {
      "TaskId": "t-gk0ahswe4blor****",
      "RequestId": "5D6FB544-F20E-14F8-B627-3F32C337****",
      "Data": [
        {
          "TaskId": "t-gk0ahswe4blor****",
          "AndroidInstanceId": "acp-c8rzmx8fnwba6****"
        },
        {
          "TaskId": "t-gk0ahswe4blor****",
          "AndroidInstanceId": "acp-5fc8mx8fnw9s5****"
        }
      ]
    }

场景四:通过公网下载应用安装包并自动安装(公网下载+内网分发模式)

场景示例

现有某应用安装包的下载链接https://apkdl.example.com/wapdl/android/apk/SogouInput_12.15.0_android_sweb.apk,需实现以下目标:

  1. 杭州地域的云手机实例1acp-c8rzmx8fnwba6****(该实例已开通互联网访问权限)从公网下载该安装包并保存到目录/sdcard/Download/中,同时重命名为sougou.apk,然后自动安装该应用。

  2. 通过内网将该安装包上传至您名下相同地域的默认OSS Bucket中。

  3. 将该安装包通过内网分发至相同地域的其他指定云手机实例,例如云手机实例2acp-5fc8mx8fnw9s5****,然后自动安装该应用。

说明
  • 该场景下,第一台云手机实例必须开通互联网访问权限,且具备足够的存储空间,否则无法下载和存储应用安装包。

  • 与场景三相比,该场景可节省公网流量费用,但由于使用了默认的OSS Bucket作为中转站,因此也会产生额外的存储费用,请按需选用。

SendFile接口调用示例

  • 请求报文

    {
        "AndroidInstanceIdList": [
            "acp-c8rzmx8fnwba6****",
            "acp-5fc8mx8fnw9s5****"
        ],
        "SourceFilePath": "/sdcard/Download",
        "UploadType": "OSS_BRIDGED",
        "UploadUrl": "https://apkdl.example.com/wapdl/android/apk/SogouInput_12.15.0_android_sweb.apk",
        "UploadEndpoint": "oss-cn-hangzhou-internal.aliyuncs.com",
        "TargetFileName": "sougou.apk",
        "AutoInstall": "true"
    }
  • 响应报文

    {
      "TaskId": "t-gk0ahswe4blor****",
      "RequestId": "5D6FB544-F20E-14F8-B627-3F32C337****",
      "Data": [
        {
          "TaskId": "t-gk0ahswe4blor****",
          "AndroidInstanceId": "acp-c8rzmx8fnwba6****"
        },
        {
          "TaskId": "t-gk0ahswe4blor****",
          "AndroidInstanceId": "acp-5fc8mx8fnw9s5****"
        }
      ]
    }

后续步骤

接口调用成功后,可以调用DescribeTasks - 查询任务接口,根据返回的TaskId来查询上传任务的进度和状态。

场景对比

  • 场景一和场景二:如果待分发的文件或应用安装包保存在与云手机实例同地域的OSS Bucket中,则无影云手机将为您做内网分发,不消耗公网流量;

  • 场景三:如果待分发的文件或应用安装包保存在公网上,则无影云手机将从公网下载多份并分发至您的云手机上,请注意您的公网流量消耗;

  • 场景四:如果待分发的文件或应用安装包保存在公网上,则无影云手机将为您从公网下载一份文件或应用安装包,并缓存在您名下的相同地域OSS Bucket中,然后通过内网分发到其他所有云手机上,因此仅需消耗少量公网流量。