You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Kotlin应用中将应用专属数据存储到用户Google Drive?

使用Google Drive API存储应用专属数据完整指南

一、前期项目配置

  • 登录Google Cloud控制台,创建新项目(或使用现有项目)
  • 在「API和服务」>「启用API和服务」中搜索并启用Google Drive API
  • 进入「API和服务」>「凭据」,创建OAuth 2.0客户端ID:
    • 根据你的应用类型选择(比如「桌面应用」「Android应用」「Web应用」)
    • 记录生成的客户端ID和客户端密钥
  • 配置「OAuth同意屏幕」:
    • 选择用户类型(内部/外部),填写必要的应用信息
    • 在「范围」中添加https://www.googleapis.com/auth/drive.appdata(这是访问应用专属数据的核心权限,不要添加普通的drive或drive.file范围)

二、用户授权流程

应用专属数据要求必须通过OAuth 2.0获取用户授权,核心要点:

  • 发起授权请求时,必须包含drive.appdata范围
  • 授权成功后,保存返回的access_token(短期有效)和refresh_token(长期有效),用于后续API调用
  • 应用专属数据存储在用户Drive的appDataFolder中,这个文件夹对用户不可见,仅授权的应用能访问

三、核心API操作示例(以Python为例)

1. 初始化Drive服务

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload, MediaIoBaseDownload

# 加载保存的凭据(包含refresh_token)
creds = Credentials.from_authorized_user_file('token.json', ['https://www.googleapis.com/auth/drive.appdata'])

# 构建Drive服务
service = build('drive', 'v3', credentials=creds)

2. 上传应用专属数据

def upload_app_data(file_path, file_name):
    try:
        file_metadata = {
            'name': file_name,
            'parents': ['appDataFolder']  # 指定存储到应用专属文件夹
        }
        media = MediaFileUpload(file_path, resumable=True)
        file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
        print(f"上传成功,文件ID: {file.get('id')}")
        return file.get('id')
    except HttpError as error:
        print(f"上传出错: {error}")
        return None

3. 下载应用专属数据

def download_app_data(file_id, save_path):
    try:
        request = service.files().get_media(fileId=file_id)
        with open(save_path, 'wb') as f:
            downloader = MediaIoBaseDownload(f, request)
            done = False
            while done is False:
                status, done = downloader.next_chunk()
                print(f"下载进度: {int(status.progress() * 100)}%")
    except HttpError as error:
        print(f"下载出错: {error}")

4. 列出应用专属文件夹内的文件

def list_app_data_files():
    try:
        results = service.files().list(spaces='appDataFolder', fields='files(id, name)').execute()
        items = results.get('files', [])
        if not items:
            print("没有找到应用专属数据文件")
            return
        print("应用专属数据文件:")
        for item in items:
            print(f"{item['name']} ({item['id']})")
        return items
    except HttpError as error:
        print(f"列错出错: {error}")
        return None

5. 删除应用专属数据

def delete_app_data(file_id):
    try:
        service.files().delete(fileId=file_id).execute()
        print("文件删除成功")
    except HttpError as error:
        print(f"删除出错: {error}")

四、关键注意事项

  • 配额限制:Google Drive API有每日请求配额,避免高频调用,可通过指数退避处理请求失败
  • 凭据持久化:refresh_token需要安全存储(比如移动端的Keychain,Web端的HttpOnly Cookie),避免泄露
  • 数据安全:敏感数据建议在本地加密后再上传,增强安全性
  • 平台适配:Android/iOS平台可使用Google官方提供的SDK,授权流程更贴合平台特性,核心API调用逻辑一致

内容的提问来源于stack exchange,提问作者Tehleel Mir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:31:55