我已经为此动了好几个星期。我无法重设自定义密码,让用户在应用程序内重设密码。
到目前为止,我可以执行以下操作:
以下是我遇到的问题:
我一定想念一些东西,但是我不确定那是什么。这是我的设置:
Firebase控制台中的我的详细信息链接页面(已编辑的敏感信息):
以下代码是actionCodeSettings和密码重置电子邮件代码(已删除敏感内容):
String url = "https://xxxxx.com";
ActionCodeSettings settings = ActionCodeSettings.newBuilder()
.setAndroidPackageName(
getPackageName(),
true, /* install if not available? */
null /* minimum app version */)
.setHandleCodeInApp(true)
.setUrl(url)
.build();
mAuth.sendPasswordResetEmail(email, settings)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "Email sent.");
hideProgressDialog();
Toast.makeText(ForgotPasswordActivity.this, getString(R.string.alert_passwordResetConfirm),
Toast.LENGTH_SHORT).show();
}
else {
Exception e = task.getException();
Log.w(TAG, "passwordResetRequest:failure " + e.getMessage(), task.getException());
hideProgressDialog();
Toast.makeText(ForgotPasswordActivity.this, e.getMessage(),
Toast.LENGTH_SHORT).show();
if (e instanceof FirebaseAuthInvalidCredentialsException) {
emailText.setError(getString(R.string.validate_email));
}
}
}
});
Android清单xml内容:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="xxxxx.app.goo.gl" android:scheme="http"/>
<data android:host="xxxxx.app.goo.gl" android:scheme="https"/>
</intent-filter>
当用户返回到应用时获取深层链接数据的代码:
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
// Get deep link from result (may be null if no link is found)
Uri deepLink = null;
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.getLink();
}
if (deepLink != null) {
Log.d(TAG, "Received Deep Link Data: " + deepLink.toString());
}
else {
Log.d(TAG, "Received Deep Link Data: " + null);
}
// Handle the deep link. For example, open the linked
// content, or apply promotional credit to the user's
// account.
// ...
// ...
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "getDynamicLink:onFailure", e);
}
});
最后,是用户将在其电子邮件中收到的示例URL:
https://xxxxx.app.goo.gl?link=https://xxxxx-00000.firebaseapp.com/__/auth/action?apiKey%<api key redacted>%26mode%3DresetPassword%26oobCode%3D<reset code redacted>%26continueUrl%3Dhttps://xxxxx.app.goo.gl/pass%26lang%3Den&apn=com.xxxxx.android
任何帮助将不胜感激。
P.S。在文档中提到要在应用程序中获取深层数据,我们称之为:启动器活动以及深层链接活动中的FirebaseDynamicLinks.getDynamicLink()。我也尝试过...仍然有空数据。
附加说明: 如果我在深层链接打开的活动中添加了以下内容:
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
Log.d(TAG, "Data Data?: " + data.toString());
我获得了用户单击以将其带到应用程序的完整路径。
在此先感谢您的帮助!
答案 0 :(得分:0)
我没有深入探讨您的答案,但是我注意到一个危险信号,因为您将FDL链接设置为您的深层链接"https://xxxxx.app.goo.gl/pass"
// I speculate this is the root cause. You are ending up with a double
// dynamic link. Change this to a webpage you own.
String url = "https://xxxxx.app.goo.gl/pass";
ActionCodeSettings settings = ActionCodeSettings.newBuilder()
.setAndroidPackageName(
getPackageName(),
true, /* install if not available? */
null /* minimum app version */)
.setHandleCodeInApp(true)
.setUrl(url)
.build();
答案 1 :(得分:0)
您必须从您的服务器创建自定义操作链接,或者它可以来自 Firebase 云功能。当您生成操作链接时,您可以添加动态链接的域名,因此 firebase 会根据您的动态链接域向您发送操作链接,然后从代码中的 URL 检索参数会更容易。
https://firebase.google.com/docs/auth/admin/email-action-links