首页 > 解决方案 > 如何使用服务帐户获取访问令牌

问题描述

我想使用服务帐户获取访问令牌,但问题是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();

标签: javaandroidgoogle-apiin-app-purchase

解决方案


从服务帐户获取访问令牌的步骤。

  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())
                        }
                    }
                }
        }

您可以从谷歌云平台下载

  1. Google Cloud Platform ->选择您的项目-> IAM & Admin -> 服务帐户->创建服务帐户

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

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

  4. 从右侧开始,有一个动作栏,每个栏都有三个点。由此,有一个选项create key。当您单击它时,它将打开一个对话框,其中包含两个选项JSONP12。当您选择JSON并单击创建时,它将下载您的服务帐户的 JSON 文件。

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

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


推荐阅读