1.2.1: clearer Google sign-in failures on microG
Some checks failed
build / apk (push) Has been cancelled
Some checks failed
build / apk (push) Has been cancelled
- show the ApiException status code (e.g. DEVELOPER_ERROR 10) instead of silently falling back to the browser - do not leave the app when the picker is cancelled (12501/16) - report a missing ID token explicitly (Android OAuth client / SHA-1 hint) - version 1.2.1
This commit is contained in:
parent
07383624fc
commit
bcebc1dbcf
4 changed files with 22 additions and 6 deletions
|
|
@ -22,8 +22,8 @@ android {
|
|||
applicationId = "dev.n1ko.nikogpt"
|
||||
minSdk = 29 // Android 10
|
||||
targetSdk = 35
|
||||
versionCode = 6
|
||||
versionName = "1.2.0"
|
||||
versionCode = 7
|
||||
versionName = "1.2.1"
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
|
|
|
|||
|
|
@ -95,16 +95,28 @@ class MainActivity : AppCompatActivity() {
|
|||
private val legacySignIn: ActivityResultLauncher<Intent> =
|
||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
||||
val link = legacyLinkMode
|
||||
try {
|
||||
val account = GoogleSignIn.getSignedInAccountFromIntent(result.data)
|
||||
val account = try {
|
||||
GoogleSignIn.getSignedInAccountFromIntent(result.data)
|
||||
.getResult(ApiException::class.java)
|
||||
val token = account?.idToken
|
||||
if (!token.isNullOrBlank()) deliverToken(token, link) else openGoogleInBrowser(link)
|
||||
} catch (e: ApiException) {
|
||||
// 12501/16 = the user closed the picker: stay in the app.
|
||||
if (e.statusCode == 12501 || e.statusCode == 16) return@registerForActivityResult
|
||||
Toast.makeText(this, getString(R.string.google_error_code, e.statusCode), Toast.LENGTH_LONG).show()
|
||||
openGoogleInBrowser(link)
|
||||
return@registerForActivityResult
|
||||
} catch (e: Exception) {
|
||||
openGoogleInBrowser(link)
|
||||
return@registerForActivityResult
|
||||
}
|
||||
val token = account?.idToken
|
||||
if (token.isNullOrBlank()) {
|
||||
// microG accepted the account but could not mint an ID token
|
||||
// (e.g. device registration is off): say so, then fall back.
|
||||
Toast.makeText(this, getString(R.string.google_no_token), Toast.LENGTH_LONG).show()
|
||||
openGoogleInBrowser(link)
|
||||
return@registerForActivityResult
|
||||
}
|
||||
deliverToken(token, link)
|
||||
}
|
||||
|
||||
// Runtime microphone permission, bridged to the WebView.
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
<string name="download_started">Загрузка началась</string>
|
||||
<string name="download_failed">Не удалось начать загрузку</string>
|
||||
<string name="google_error">Не удалось войти через Google (%1$s)</string>
|
||||
<string name="google_error_code">Не удалось войти через Google (код %1$d)</string>
|
||||
<string name="google_no_token">Google не вернул ID-токен (проверьте Android OAuth-клиент: package и SHA-1)</string>
|
||||
<string name="attach_file">Файл</string>
|
||||
<string name="attach_camera">Камера</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
<string name="download_started">Download started</string>
|
||||
<string name="download_failed">Could not start the download</string>
|
||||
<string name="google_error">Google sign-in failed (%1$s)</string>
|
||||
<string name="google_error_code">Google sign-in failed (code %1$d)</string>
|
||||
<string name="google_no_token">Google did not return an ID token (check the Android OAuth client, package and SHA-1)</string>
|
||||
<string name="attach_file">File</string>
|
||||
<string name="attach_camera">Camera</string>
|
||||
</resources>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue