如何使用服务帐户获取访问令牌

时间:2020-04-07 06:20:04

标签: java android google-api in-app-purchase

我想使用服务帐户获取访问令牌,但问题是将json文件放在哪里?如何链接。在文档部分,没有适当的指导原则。我需要asynctask吗?

这是代码:

    HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
    JsonFactory JSON_FACTORY = new JacksonFactory();

    GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(HTTP_TRANSPORT)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId("")
        .setServiceAccountScopes("https://www.googleapis.com/auth/androidpublisher")
        .setServiceAccountPrivateKeyFromP12File(keyFile) // where to put the json file?
        .build();
      AccessToken accessToken = credentials.refreshAccessToken();

1 个答案:

答案 0 :(得分:1)

步骤以获取来自服务帐户的访问令牌。

  class MainActivity : AppCompatActivity() {
          override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)
                setContentView(R.layout.activity_main)
                authExplicit()
            }
             fun authExplicit() {
                    CoroutineScope(Dispatchers.Default).launch {
                        try {
                            val credentials =
                                GoogleCredentials.fromStream(resources.assets.open("studentsamplechatbot-xvgloa.json"))
                                    .createScoped(Collections.singletonList("https://www.googleapis.com/auth/dialogflow"))
                            credentials.refreshIfExpired()
                            val accessToken = credentials.accessToken
                            Log.e("log_data", "Token :" + accessToken.tokenValue)
                            if (accessToken.tokenValue.isNotEmpty()) {
                                Log.e(
                                    "log_data",
                                    "Got it --> authenticationType :" + credentials.authenticationType
                                )
                                AuthToken = "Bearer " + accessToken.tokenValue
                            } else {
                                Log.e("log_data", "No token")
                                AuthToken = ""
                            }
                            CoroutineScope(Dispatchers.Main).launch {
                                initViews()
                            }
                        } catch (e: Exception) {
                            Log.e("log_data", e.toString())
                        }
                    }
                }
        }

您可以从Google Cloud Platform下载

  1. Google Cloud Platform -> 选择您的项目-> IAM和管理员-> 服务帐户 >-> 创建服务帐户

  2. 创建服务帐户将打开一个页面,其中有一些详细信息可添加并创建详细信息。

  3. 创建服务帐户后,您可以在列表中找到一个已创建的服务帐户。

  4. 在右侧,有“操作”列,每个列有三个点。因此,有一个选项创建密钥。当您单击它时,它将打开一个对话框,其中包含两个选项 JSON P12 。当您选择 JSON 并单击创建时,它将下载您的服务帐户的JSON文件。

  5. 您可以将此JSON文件用于您的Android项目,并将其放入assets文件夹中。 您的项目-> 应用-> src -> 主要-> 资产 < / p>

  6. 您可以使用上述功能获取访问令牌。