Google Drive API 初始化和首次使用问题

问题描述 投票:0回答:2

我正在编写一个使用 Google Drive API 的 Android 应用程序。如果用户选择将应用程序与其 Google 云端硬盘同步,我将使用 Drive.SCOPE_APPFOLDER 来拥有一个私人位置来放置我的应用程序数据。在大多数情况下,一切正常,我可以将内容同步到 Google 云端硬盘。然而,我在初始化方面遇到了很大的困难。首先,我可以识别用户何时未使用 Google Drive 并启动登录活动。这是我构建谷歌登录客户端的方法。我实际上并不认为我需要 .requestEmail() 和 .requestProfile() 但它现在就在那里。

    private GoogleSignInClient buildGoogleSignInClient(AppCompatActivity activity) {
    GoogleSignInOptions signInOptions =
            new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestScopes(Drive.SCOPE_APPFOLDER)
                    .requestEmail()
                    .requestProfile()
                    .build();
    return GoogleSignIn.getClient(activity, signInOptions);
}

为了识别用户尚未登录 Google 云端硬盘或通过应用程序使用云端硬盘,我有以下代码。

   private void initGoogleClient() {
       mGoogleSignInAccount = GoogleSignIn.getLastSignedInAccount(getActivity());
       if (mGoogleSignInAccount == null) {
          launchSigninActivity(getActivity());
       } else {
          mDriveResourceClient = Drive.getDriveResourceClient(getActivity().getApplicationContext(), mGoogleSignInAccount);
        //.... doing stuff here that works fine
    }
}

要启动登录活动,我有以下代码。

    private void launchSigninActivity(AppCompatActivity activity) {
        mGoogleSignInClient = buildGoogleSignInClient(activity);
        Intent signinIntent = mGoogleSignInClient.getSignInIntent();
        activity.startActivityForResult(signinIntent, SIGNIN_INTENT_CODE);
   }

现在登录活动启动得很好,用户可以登录他们的 Google 帐户。但是,每当显示 Google UI 以登录用户时,都会引发错误代码 code=8 INTERNAL_ERROR。如果用户在使用我的应用程序之前已经登录过他们的云端硬盘帐户,则不会抛出错误代码 8。

public void handleSignIn(int requestCode, int resultCode, Intent data) {
    Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
    try {
        mGoogleSignInAccount = task.getResult(ApiException.class);
        mDriveResourceClient = Drive.getDriveResourceClient(getActivity().getApplicationContext(), mGoogleSignInAccount);
        //... other App specific stuff
    } catch (ApiException e) {
        Log.w(TAG, "************* signInResult:failed code=" + e.getStatusCode());
    }
}

(我的活动中的 onActivityResults() 调用上面的代码) getActivity() 方法仅返回处理 onActivityResults() 的活动。

我注意到的第二个问题是,第一次使用我的应用程序时使用 GoogleResourceClient 时存在一些计时问题。前几次我尝试读取驱动器,它似乎是空的,但在某些时候远程文件会显示出来。我没有描述读取查找文件之前需要多长时间,但似乎驱动器 API 在初始/首次应用程序使用调用时对远程驱动器的任何调用之前返回。

这些问题仅在首次使用 Android 应用程序时发生。该应用程序的所有后续启动都运行顺利。大家对这些问题有什么想法吗?

android google-drive-api
2个回答
0
投票

Google 已弃用此库。移动 Google Drive REST API。


0
投票

人们仍在寻找 Google Drive API 相关问题,Google 已准备了一个示例应用程序来展示新的 V3 API(并且您需要迁移):

https://github.com/googleworkspace/android-samples/tree/master/drive/deprecation

这对我来说是一个很大的帮助。

迁移须知 https://developers.google.com/drive/api/guides/migrate-to-v3

@masterjunk - 您需要 requestEmail(),因为没有它,Drive API 将无法工作

© www.soinside.com 2019 - 2024. All rights reserved.