Firebase UI 电子邮件链接登录意图额外为空
Posted
技术标签:
【中文标题】Firebase UI 电子邮件链接登录意图额外为空【英文标题】:Firebase UI Email Link signin intent extra is null 【发布时间】:2020-02-09 12:05:54 【问题描述】:以下 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"
显示尽管成功获得了意图,但 getExtras()
中没有额外的 EMAIL_LINK_SIGNIN
。我花了几个小时查看 FirebaseUi 的源代码,但我没有找到常量 EMAIL_LINK_SIGN_IN
的使用位置以及动态链接的意图是如何解析的。
感谢您提供任何解决此问题的方法。我已经花了一整天的时间试图弄清楚这一点。
【问题讨论】:
我发现了,改用intent.getresult.tostring。 【参考方案1】:不要使用String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
,而是使用getIntent().getData().toString();
。
【讨论】:
感谢您的回答。虽然它与我不再相关。我刚刚检查了 FireBaseUI firebase.google.com/docs/auth/android/email-link-auth 上的较新文档。官方文档现在更新为使用String emailLink = intent.getData().toString();
(所以当我阅读它时,文档是错误的/过时的)。而不是String emailLink = intent.getExtras().toString();
。你能确认他们两个都有效还是只有getExtras
有效?
这两个是什么意思?另外,请您接受答案,以便其他读者可以看到解决方案。
请检查上面的链接以获取电子邮件身份验证。它使用.getData()
而不是.getExtra()
。您的回答目前与官方文档冲突。我只是想在接受之前仔细检查。
我已经对两者进行了测试,我可以确认它们都可以在我的设备上运行。但我仍然更新了答案以适应官方文档以上是关于Firebase UI 电子邮件链接登录意图额外为空的主要内容,如果未能解决你的问题,请参考以下文章
com.firebase.ui.auth.FirebaseUiException:提供程序错误 - Firebase-UI 身份验证 Facebook 登录不起作用
在电子邮件密码身份验证中进行额外的自定义检查 (Flutter - Firebase)
使用 Firebase 电子邮件链接登录进行 e2e 测试?