Amplify.Auth.fetchAuthSession() 压缩 apk 时 userPoolTokens 为 null

Amplify.Auth.fetchAuthSession() userPoolTokens is null when shrinking the apk

我正在使用 flutter 的放大库连接到我的 aws 后端。成功调用 Amplify.Auth.signIn() 后,我使用 Amplify.Auth.fetchAuthSession() 访问当前凭据。像那样:

final result = await Amplify.Auth.fetchAuthSession(
  options: CognitoSessionOptions(getAWSCredentials: true),
);

if (!result.isSignedIn) return const None();

if (result is CognitoAuthSession) {
  return Some(result.userPoolTokens.idToken);
}

但是当我使用以下命令构建带有 flutter 的 apk 时,我的代码中断了。

flutter build apk

因为 result.userPoolTokens 突然为空,我得到一个 NoSuchMethodError。 getter 'idToken' 被调用为 null。但是,如果我禁用收缩并使用以下命令构建 apk,一切都会再次运行。

flutter build apk --no-shrink

所以我认为这与收缩有关,我更愿意收缩我的应用程序,因为收缩后的 apk 明显更小。

非常感谢任何帮助。

这可能是由于对 R8 收缩器应用的规则不充分。

Amplify Android 库在 2021 年 1 月 22 日刚刚发布的版本 1.6.10(参见 release notes)之前没有出售任何 consumer-rules.pro

Amplify Flutter最新版本是0.0.2-dev.1, and it consumes version 1.6.8 of the Android library. I've raised an issue on their GitHub repository,更新到1.6.10。

同时,您可以尝试在您的顶级应用程序项目中应用这些规则。

-keep class com.amazon.** { *; }
-keep class com.amazonaws.** { *; }
-keep class com.amplifyframework.** { *; }