GoogleDrive获取令牌+刷新令牌为何如此复杂?

时间:2015-07-06 14:30:26

标签: android

我花了最近两天的时间搜索和研究这个问题,我必须承认,与我已经完成的iOS或Windows相比,我在Android中实现这一点感到非常复杂!

我试图获取令牌和刷新令牌以发送到我的后端服务器,以便它可以代表用户处理Drive API调用,这只是一个巨大的混乱!

我试图关注许多不同的博客,谷歌开发者页面的无数不同方式,这里和其他地方的无数帖子。 什么都行不通。

也许这里有人可以帮助我...... 这是我目前的情况:

首先我使用

String[] accountTypes = new String[]{"com.google"};
        Intent intent = AccountPicker.newChooseAccountIntent(null, null,
                accountTypes, false, null, null, null, null);
        startActivityForResult(intent, 10001);

选择一个帐户或注册一个新的Google帐户。 然后,我正在使用

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(new NetHttpTransport(),
                        new JacksonFactory(),
                        clientId,
                        secret,
                        Arrays.asList(DriveScopes.DRIVE)).setAccessType("offline").setApprovalPrompt("force")
                        .build();

生成GoogleAuthorizationCodeFlow对象。有了这个,我可以获得GoogleAuthorizationCodeTokenRequest。但我得到的回应只有一个令牌。没有刷新令牌。

我已经批准了出现的同意对话框,根据我的理解,该对话框也应该在之后为我提供刷新令牌。

我做错了什么?或者至少,有什么地方我可以找到一个关于如何获得刷新令牌的明确例子吗?

1 个答案:

答案 0 :(得分:1)

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