由于try 使用Firebase AuthUI登录时出错,我的应用程序被Amazon Appstore拒绝.

我决定做一些研究,发现所有亚马逊Fire设备都没有运行Google Play服务.我安装了一个没有谷歌服务的新模拟器,也得到了一个错误.

奇怪的是,Firebase Auth的20.0.0版引入了"The Firebase Authentication Android library now works on devices without Google Play services."功能.

代码

public void signIn() {
    List<AuthUI.IdpConfig> listProviders = Arrays.asList(
            new AuthUI.IdpConfig.GoogleBuilder().build(),
            new AuthUI.IdpConfig.FacebookBuilder().build(),
            new AuthUI.IdpConfig.TwitterBuilder().build(),
            new AuthUI.IdpConfig.YahooBuilder().build(),
            new AuthUI.IdpConfig.EmailBuilder().build()
    );

    // Create and launch sign-in intent
    Intent intentSignIn = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(listProviders)
            .setTheme(R.style.LoginTheme)
            .setLogo(R.drawable.login_icon)
            .setTosAndPrivacyPolicyUrls(
                    "URL",
                    "URL")
            .build();
    activityResultLauncherSignIn.launch(intentSignIn);
}

// https://developer.android.com/training/basics/intents/result
private final ActivityResultLauncher<Intent> activityResultLauncherSignIn = registerForActivityResult(
        new FirebaseAuthUIActivityResultContract(),
        this::onSignInResult
);

private void onSignInResult(FirebaseAuthUIAuthenticationResult firebaseAuthUIAuthenticationResult) {
    IdpResponse idpResponse = firebaseAuthUIAuthenticationResult.getIdpResponse();
    if (firebaseAuthUIAuthenticationResult.getResult代码() == RESULT_OK) {
        if (firebaseUser != null && firebaseUser.getEmail() != null && !firebaseUser.isEmailVerified())
            sendVerificationEmail();
    } else {
        // Sign in failed. If response is null the user canceled the sign-in flow using the back button. Otherwise check response.getError().getError代码() and handle the error.
        if (idpResponse != null && idpResponse.getError() != null) {
            Log.e(TAG, "Problem with Firebase authentication: " + idpResponse.getError().getError代码());
        }
    }
}

错误: Firebase身份验证问题:0

Com.google.android.play.core.install.InstallException:-9:安装错误(-9):Play Store应用程序未安装或不是官方版本.

我正在使用以下依赖项:

implementation platform('com.google.firebase:firebase-bom:32.3.1')
implementation 'com.firebaseui:firebase-ui-auth:8.0.2'
implementation 'com.google.android.gms:play-services-auth:20.7.0'

推荐答案

有几件事你可以try 让Firebase Auth在没有Google Play服务的亚马逊设备上工作:

  1. 在开发/测试期间使用Firebase身份验证仿真器.这使您可以测试Auth,而不需要具有Play服务的实际设备.只要确保也在实际的亚马逊设备上进行测试即可.

  2. 将身份验证配置为使用邮箱/密码和匿名登录,这不需要Play Services.避开谷歌、Facebook和TwitterProvider .

  3. 在不使用Play Services的情况下使用AuthUI组件:

AuthUI.getInstance().createSignInIntentBuilder()
  .setIsSmartLockEnabled(false)
  .setAvailableProviders(Arrays.asList(
      new AuthUI.IdpConfig.EmailBuilder().build(), 
      new AuthUI.IdpConfig.AnonymousBuilder().build())
  .build();
  1. 使用FirebaseOptions初始化Firebase应用程序以禁用身份验证:
FirebaseOptions options = new FirebaseOptions.Builder()
  .setApiKey(...)
  .setAppId(...)
  .setAuthEnabled(false) // disable Auth
  .build();

FirebaseApp.initializeApp(context, options);
  1. 优雅地处理FirebaseException,并提供另一种登录方法.

  2. 考虑使用像AppAuth这样的库来处理OAuth,而不是使用Firebase UI/Play服务.

通过这些方法的组合,您应该能够在亚马逊设备上支持Auth而不使用Play服务.

Java相关问答推荐

将状态栏和导航栏设置为白色,带有深色文本

Java JAR环境(JRE)是否支持模块?

BiPredicate和如何使用它

JDK22执行repackage of goal org. springframework. boot:spring—boot—maven—plugin:3.2.3:repackage failed:unsupported class file major version 66—>

@ IdClass with @ Inheritance(策略= InheritanceType. SINGLE_TABLE)

我无法将附件发送到NetBeans之外

基本时态运算的ISO-8601周数据表示法

XPages-在第二次点击按钮之前延迟

对某一Hyroby控制器禁用@cacheable

内存中的H2修剪尾随空格

暂停计时器

安装Java Jar应用程序的Install4j遇到ClassNotFoundException的运行时错误

我正在try 跟踪数组中最大的两个数字

Regex以查找不包含捕获组的行

如何使用Criteria Builder处理一对多关系中的空值?

Android Studio模拟器没有互联网

AWS Java SDK v2.x中没有setObjectAcl方法

无限递归Java问题

Java返回生成器的实现

读取ConcurrentHashMap中的可变对象