Firebase UI邮件链接登录意图额外为空

问题描述 投票:3回答:1

以下3个函数用于设置电子邮件和其他认证检查(按顺序调用)

    private void buildSignInIntentBuilder() {

        ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
                        .setAndroidPackageName(getString(R.string.packageName), true, null)
                        .setHandleCodeInApp(true)
                        .setUrl(getString(R.string.dynamic_link_url))
                        .build();

        List<AuthUI.IdpConfig> providers = Arrays.asList(
                new AuthUI.IdpConfig.EmailBuilder()
                        .enableEmailLinkSignIn()
                        .setActionCodeSettings(actionCodeSettings)
                        .build(),
                // new AuthUI.IdpConfig.EmailBuilder().setRequireName(false).build(),
                new AuthUI.IdpConfig.PhoneBuilder()
                        .build(),
                new AuthUI.IdpConfig.GoogleBuilder()
                        .build(),
                new AuthUI.IdpConfig.FacebookBuilder()
                        .build());

        signInIntentBuilder = AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setIsSmartLockEnabled(false)
                .setAvailableProviders(providers)
                .setLogo(R.drawable.icon_forget_me_not_1);
    }

    private void catchEmailLinkSignIn() {
        Log.d(TAG, "Intent: " + getIntent().getExtras());
        if (AuthUI.canHandleIntent(getIntent())) {
            if (getIntent().getExtras() == null) {
                return;
            }

            String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
            Log.d(TAG, "link: " + link);
            if (link != null) {
                signInIntentBuilder.setEmailLink(link);
            }
        }
    }

    private void createCheckAndSigninListener() {
        // set firebase sign in listener
        mAuthStateListner = firebaseAuth -> {
            // Already logged in
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                Log.d(TAG, "user already signed in");
                // Check user even if signed in to register him to database (if haven't)
                FirebaseAuthHelper.getInstance().checkRegisterUser(user, this, CHECK_USER_DB);
            } else {
                Log.d(TAG, "user hasn't signed in");
                // Signed out or hasn't logged in
                startActivityForResult(
                        signInIntentBuilder
                                .build(),
                        RC_SIGN_IN
                );

            }
        };
    }

我已经用firebase主机设置了一个动态链接。并且能够在点击收到的邮件链接后重定向到相同的活动中。

然而。

String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
Log.d(TAG, "link: " + link); // --> produces "link: null"

显示,尽管成功获得意向,但并不存在 EMAIL_LINK_SIGNIN 额外 getExtras(). 我花了几个小时研究FirebaseUi的源代码,但我没有找到常量在哪里。EMAIL_LINK_SIGN_IN 的使用,以及如何解析动态链接的意图。

如果有什么办法可以解决这个问题,那就感激不尽了。我已经花了一整天的时间来解决这个问题。

firebase firebase-authentication firebaseui
1个回答
1
投票

而不是使用 String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN); 使用 getIntent().getData().toString(); 而不是。

© www.soinside.com 2019 - 2024. All rights reserved.