Я пытался реализовать функцию отправки электронной почты с помощью Gmail API в приложении Kotlin Android. Мне удалось реализовать вход в Google одним касанием. Я получаю токен от функции onActivityResult(). Я хочу использовать этот токен для доступа к Gmail API и отправки электронного письма.
Это мой исходный код, который я использовал для реализации Вход в Google одним нажатием. Я хочу реализовать функцию отправки электронной почты с помощью Gmail API. Можете ли вы помочь мне с этой проблемой?
val SERVER_CLIENT_ID ="#######################.apps.googleusercontent.com"
private lateinit var oneTapClient: SignInClient
private lateinit var signInRequest: BeginSignInRequest
val REQ_ONE_TAP = 100
@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
// get reference to button
var authBtn = findViewById(R.id.sign_in_button) as Button
authBtn.setOnClickListener(){
oneTapClient = Identity.getSignInClient(this)
signInRequest = BeginSignInRequest.builder()
.setPasswordRequestOptions(BeginSignInRequest.PasswordRequestOptions.builder()
.setSupported(true)
.build())
.setGoogleIdTokenRequestOptions(
BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
.setSupported(true)
// Your server's client ID, not your Android client ID.
.setServerClientId(SERVER_CLIENT_ID)
// Only show accounts previously used to sign in.
.setFilterByAuthorizedAccounts(false)
.build())
// Automatically sign in when exactly one credential is retrieved.
.setAutoSelectEnabled(true)
.build()
oneTapClient.beginSignIn(signInRequest)
.addOnSuccessListener(this) { result ->
try {
startIntentSenderForResult(
result.pendingIntent.intentSender, REQ_ONE_TAP,
null, 0, 0, 0, null)
} catch (e: IntentSender.SendIntentException) {
Log.e(TAG, "Couldn't start One Tap UI: ${e.localizedMessage}")
}
}
.addOnFailureListener(this) { e ->
// No saved credentials found. Launch the One Tap sign-up flow, or
// do nothing and continue presenting the signed-out UI.
Log.d(TAG, e.localizedMessage)
}
}
}
@RequiresApi(Build.VERSION_CODES.O)
private fun generateSecureNonce(length: Int = 32): String? {
val random = SecureRandom()
val nonceBytes = ByteArray(length)
random.nextBytes(nonceBytes)
return Base64.getUrlEncoder().withoutPadding().encodeToString(nonceBytes)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val tv = findViewById(R.id.textView) as TextView
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQ_ONE_TAP -> {
try {
val credential = oneTapClient.getSignInCredentialFromIntent(data)
val idToken = credential.googleIdToken
val username = credential.id
val password = credential.password
when {
idToken != null -> {
// Got an ID token from Google. Use it to authenticate
// with your backend.
Log.d(TAG, "Got ID token.")
tv.setText(idToken.toString())
}
password != null -> {
// Got a saved username and password. Use them to authenticate
// with your backend.
Log.d(TAG, "Got password.")
}
else -> {
// Shouldn't happen.
Log.d(TAG, "No ID token or password!")
tv.setText("No ID or Password")
}
}
} catch (e: ApiException) {
tv.setText(e.toString())
Log.d(TAG, e.toString())
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... kotlin-app
Интегрируйте API Gmail в приложение Android Kotlin ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1728298270
Anonymous
Я пытался реализовать функцию отправки электронной почты с помощью [b]Gmail API в приложении Kotlin Android[/b]. Мне удалось реализовать [b]вход в Google одним касанием[/b]. Я получаю токен от функции [b]onActivityResult()[/b]. Я хочу использовать этот [b]токен[/b] для доступа к [b]Gmail API[/b] и отправки электронного письма.
Это мой исходный код, который я использовал для реализации [b]Вход в Google одним нажатием[/b]. Я хочу реализовать функцию [b]отправки электронной почты[/b] с помощью [b]Gmail API[/b]. Можете ли вы помочь мне с этой проблемой?
val SERVER_CLIENT_ID ="#######################.apps.googleusercontent.com"
private lateinit var oneTapClient: SignInClient
private lateinit var signInRequest: BeginSignInRequest
val REQ_ONE_TAP = 100
@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
// get reference to button
var authBtn = findViewById(R.id.sign_in_button) as Button
authBtn.setOnClickListener(){
oneTapClient = Identity.getSignInClient(this)
signInRequest = BeginSignInRequest.builder()
.setPasswordRequestOptions(BeginSignInRequest.PasswordRequestOptions.builder()
.setSupported(true)
.build())
.setGoogleIdTokenRequestOptions(
BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
.setSupported(true)
// Your server's client ID, not your Android client ID.
.setServerClientId(SERVER_CLIENT_ID)
// Only show accounts previously used to sign in.
.setFilterByAuthorizedAccounts(false)
.build())
// Automatically sign in when exactly one credential is retrieved.
.setAutoSelectEnabled(true)
.build()
oneTapClient.beginSignIn(signInRequest)
.addOnSuccessListener(this) { result ->
try {
startIntentSenderForResult(
result.pendingIntent.intentSender, REQ_ONE_TAP,
null, 0, 0, 0, null)
} catch (e: IntentSender.SendIntentException) {
Log.e(TAG, "Couldn't start One Tap UI: ${e.localizedMessage}")
}
}
.addOnFailureListener(this) { e ->
// No saved credentials found. Launch the One Tap sign-up flow, or
// do nothing and continue presenting the signed-out UI.
Log.d(TAG, e.localizedMessage)
}
}
}
@RequiresApi(Build.VERSION_CODES.O)
private fun generateSecureNonce(length: Int = 32): String? {
val random = SecureRandom()
val nonceBytes = ByteArray(length)
random.nextBytes(nonceBytes)
return Base64.getUrlEncoder().withoutPadding().encodeToString(nonceBytes)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val tv = findViewById(R.id.textView) as TextView
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQ_ONE_TAP -> {
try {
val credential = oneTapClient.getSignInCredentialFromIntent(data)
val idToken = credential.googleIdToken
val username = credential.id
val password = credential.password
when {
idToken != null -> {
// Got an ID token from Google. Use it to authenticate
// with your backend.
Log.d(TAG, "Got ID token.")
tv.setText(idToken.toString())
}
password != null -> {
// Got a saved username and password. Use them to authenticate
// with your backend.
Log.d(TAG, "Got password.")
}
else -> {
// Shouldn't happen.
Log.d(TAG, "No ID token or password!")
tv.setText("No ID or Password")
}
}
} catch (e: ApiException) {
tv.setText(e.toString())
Log.d(TAG, e.toString())
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79061590/integrate-gmail-api-to-android-kotlin-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия