java - 如何使用服务帐户获取访问令牌
问题描述
我想使用服务帐户获取访问令牌,但问题是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();
解决方案
从服务帐户获取访问令牌的步骤。
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 ->选择您的项目-> IAM & Admin -> 服务帐户->创建服务帐户
创建一个服务帐户将打开一个页面,其中有几个添加详细信息并创建它的详细信息。
创建服务帐户后,您可以在列表中找到已创建的服务帐户。
从右侧开始,有一个动作栏,每个栏都有三个点。由此,有一个选项create key。当您单击它时,它将打开一个对话框,其中包含两个选项JSON和P12。当您选择JSON并单击创建时,它将下载您的服务帐户的 JSON 文件。
您可以将此 JSON 文件用于您的 Android 项目并将其放入
assets
文件夹中。 你的项目->应用程序-> src ->主要->资产您可以使用上述函数获取访问令牌。
推荐阅读
- r - 无法理解列表是如何构建的
- spring-integration - Sprint 集成流程无法启动
- haskell - 如何将字符与 Haskell 中的数字进行比较?
- spring-boot - 弹簧靴找不到配置文件
- reactjs - 如何使用 Axios 从 React 功能组件向 localhost 服务器发出的 get 请求中访问数据?
- filtering - 我可以关闭 Tableau 筛选器中的条件吗?
- android - Recylerview 项目有时只注册点击
- jquery - 在来自浏览器的 POST 请求之前,是否验证了 HTTP 标头中的内容类型?
- windows - _vimrc 他的主目录覆盖 $VIM 中的 _vimrc
- elasticsearch - elasticsearch 找不到命令行工具