Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GoogleDrive获取令牌+;刷新令牌为什么这么复杂?_Android - Fatal编程技术网

Android GoogleDrive获取令牌+;刷新令牌为什么这么复杂?

Android GoogleDrive获取令牌+;刷新令牌为什么这么复杂?,android,Android,我花了两天的时间搜索和研究这件事,我必须承认,我很震惊在Android中实现这一点与我已经完成的iOS或Windows相比是如此的复杂 我正在尝试获取一个令牌和一个刷新令牌以发送到我的后端服务器,这样它就可以代表用户处理驱动器API调用,这简直是一团糟 我试着去关注很多不同的博客,从谷歌的开发者页面,这里和其他地方的无数帖子中,找到无数不同的方式。 什么都不管用 也许这里有人能帮我。。。 以下是我目前的情况: 首先我使用 String[] accountTypes = new String[]{

我花了两天的时间搜索和研究这件事,我必须承认,我很震惊在Android中实现这一点与我已经完成的iOS或Windows相比是如此的复杂

我正在尝试获取一个令牌和一个刷新令牌以发送到我的后端服务器,这样它就可以代表用户处理驱动器API调用,这简直是一团糟

我试着去关注很多不同的博客,从谷歌的开发者页面,这里和其他地方的无数帖子中,找到无数不同的方式。 什么都不管用

也许这里有人能帮我。。。 以下是我目前的情况:

首先我使用

String[] accountTypes = new String[]{"com.google"};
        Intent intent = AccountPicker.newChooseAccountIntent(null, null,
                accountTypes, false, null, null, null, null);
        startActivityForResult(intent, 10001);
选择一个帐户或注册一个新的谷歌帐户。 那么,我正在使用

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(new NetHttpTransport(),
                        new JacksonFactory(),
                        clientId,
                        secret,
                        Arrays.asList(DriveScopes.DRIVE)).setAccessType("offline").setApprovalPrompt("force")
                        .build();
生成GoogleAuthorizationCodeFlow对象。有了这个,我可以得到一个GoogleAuthorizationCodeTokenRequest。但我得到的回应只有一个象征。没有刷新令牌

我已经批准了出现的同意对话框,据我所知,该对话框还应在之后向我提供刷新令牌


我做错了什么?或者至少,我可以在哪里找到一个关于如何获取刷新令牌的清晰示例??

好的,那么在进一步挖掘之后。。。我最终发现了这个。 它基本上解释了令牌+刷新令牌不是应用程序/客户端的责任,而是后端服务器的责任,客户端需要向后端服务器提供的只是一个临时授权代码,可以使用
GoogleAuthUtil.getToken()
轻松获得。服务器将使用该身份验证代码生成令牌和刷新令牌,以备将来使用。这是可以解释的。
我希望这可能对将来遇到此问题的人有所帮助。

您是否查阅了android文档以了解新的驱动器api?对肯定但是,除非我大错特错,否则这个流程不会为我提供所需的代币。它只允许我在应用程序中使用驱动API调用。正确吗?使用此代码,您只需将凭据传递给Google Drive服务的实例,不需要令牌。credential=GoogleAccountCredential.UsingAuth2(getApplicationContext(),Arrays.asList(SCOPES)).setBackOff(新的指数备份()).setSelectedAccountName(googleUserName);driveService=new com.google.api.services.drive.drive.Builder(传输、jsonFactory、凭证).setApplicationName(getString(R.string.app_name)).build();嗨,本,谢谢你的帮助。我在这里提供的帐户名,是否可以使用AccountPicker获取它,然后将其传递给credentials方法?正如我提到的,我们的后端服务器需要这2个令牌。这就是它目前的建造方式。我能用你在这里描述的方法得到它们吗?感谢您获取用户名。您可以使用空字符串或null初始化凭据,然后调用startActivityForResult(credential.newChooseAccountContent(),REQUEST_CODE);这将显示android帐户选择器。然后,您可以覆盖onActivityResult并处理响应,以在凭据上设置用户名,并对其执行任何其他操作。不幸的是,我认为您无法从GoogleAccountCredential获得刷新令牌,但我会检查javadoc以确保。它确实有一个获取访问令牌的getToken方法。