Получение ошибки при создании ключа авторизации с использованием GoogleCredentials.fromStream в сборке выпускаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Получение ошибки при создании ключа авторизации с использованием GoogleCredentials.fromStream в сборке выпуска

Сообщение Anonymous »

Я использую новый протокол FCM HTTPS v1. При создании APK-файла выпуска я получаю сообщение об ошибке. Ошибка возникает в классе GenerateAccessToken при попытке создать токен для Firebase Cloud Messaging. В частности, он выдает исключение IllegalArgumentException, но у меня нет полного сообщения об ошибке.
Похоже, проблема связана с анализом JSON служебного аккаунта или созданием объекта GoogleCredentials. Вот несколько дополнительных шагов и рекомендаций по устранению этой неполадки:
  • Проверьте целостность JSON:
    Убедитесь, что JSON вашего сервисного аккаунта заполнен и правильно отформатирован. Предоставленный вами фрагмент сокращен, что может быть частью проблемы.
  • Конфигурация R8/ProGuard:
    При создании APK-версии версии R8 (оптимизатор Android по умолчанию) или ProGuard могут удалить необходимые классы. Вы предоставили некоторые правила ProGuard, но нам, возможно, потребуется добавить больше.

Код: Выделить всё

class GenerateAccessToken @Inject constructor(
@ApplicationContext private val context: Context
) {
private val url = "https://www.googleapis.com/auth/firebase.messaging"
fun generateToken(): String = try {
val key = "{\n" +
"  \"type\": \"service_account\",\n" +
"  \"project_id\": \"resea\",\n" +
"  \"private_key_id\": \"6b78ce638b9decfd3db74e33c5632b87aaf7b0d5\",\n" +
"  \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nM\\n-----END PRIVATE KEY-----\\n\",\n" +
"  \"client_email\": \"firebase-adminsdk-ph923@researchhub-21392.iam.gserviceaccount.com\",\n" +
"  \"client_id\": \"\",\n" +
"  \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n" +
"  \"token_uri\": \"https://oauth2.googleapis.com/token\",\n" +
"  \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n" +
"  \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-ph923%40researchhub-21392.iam.gserviceaccount.com\",\n" +
"  \"universe_domain\": \"googleapis.com\"\n" +
"}"
Log.d("AAA", key)
val credential = GoogleCredentials.fromStream(key.byteInputStream()).createScoped(url)
credential.refreshIfExpired()
Log.d("AAA", credential.accessToken.tokenValue)
credential.accessToken.tokenValue
} catch (e: Exception) {
Log.e(TAGS.ERROR.name, "generateToken: $e")
""
}
}
Ошибка

Код: Выделить всё

 generateToken: java.lang.IllegalArgumentException:
Я перепробовал все мысли, но не смог решить
Вот мой прогаурд

Код: Выделить всё

-keep class com.google.gson.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken

-keepattributes AnnotationDefault,RuntimeVisibleAnnotations

-keepattributes Signature
-keepclassmembers class * {
@com.google.gson.annotations.SerializedName ;
}
-keep class com.atech.core.model.** { *; }
-keep class com.atech.core.utils.JsonKt { *; }
-keep class com.google.auth.oauth2.** { *; }

-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes

-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
Кто-нибудь может решить эту проблему?


Подробнее здесь: https://stackoverflow.com/questions/787 ... omstream-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»