【问题标题】:How to get access token Using Service Account如何使用服务帐户获取访问令牌
【发布时间】:2020-04-07 06:20:04
【问题描述】:
我想使用服务帐户获取访问令牌,但问题是在哪里放置 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();
【问题讨论】:
标签:
java
android
google-api
in-app-purchase
【解决方案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 -> 选择您的项目 -> IAM & Admin -> 服务帐号 -> 创建服务帐号
创建服务帐户将打开一个页面,其中包含添加详细信息并创建它的几个详细信息。
创建服务帐号后,您可以在列表中找到已创建的服务帐号。
从右侧,有一个动作栏,每个栏有三个点。从那里,有一个选项创建密钥。当您单击它时,它将打开一个对话框,其中包含 JSON 和 P12 两个选项。当您选择 JSON 并单击创建时,它将下载您的服务帐户的 JSON 文件。
您可以将此 JSON 文件用于您的 Android 项目,并将其放入 assets 文件夹中。
你的项目 -> app -> src -> main -> assets
您可以使用上述函数获取访问令牌。