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

时间:2018-08-06 15:55:30

标签: android google-drive-api

我正在编写一个使用Google Drive API的Android应用程序。如果用户选择将应用程序与其Google驱动器同步,则我正在使用Drive.SCOPE_APPFOLDER放置私有位置来存放我的应用程序数据。大部分情况下一切正常,我可以将内容同步到Google驱动器。但是,我在初始化方面遇到很大的困难。首先,我可以识别用户何时未使用Google驱动器并启动登录活动。这是我建立Google登录客户端的方法。我实际上不认为我需要.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应用程序时发生。该应用程序的所有后续启动均运行平稳。有人对这些问题有任何想法吗?

1 个答案:

答案 0 :(得分:0)

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