我正在开发一个Android应用程序,其中已使用Firebase密码身份验证登录用户。
用户提供电子邮件和密码后,我正在使用FirebaseAuth SDK发送验证电子邮件。
/** SEND A VERIFICATION MAIL TO THE USER **/
ActionCodeSettings.Builder settingBuilder = ActionCodeSettings.newBuilder();
String url = getString(R.string.link_mail_verification);
settingBuilder.setUrl(url).setHandleCodeInApp(true);
ActionCodeSettings settings = settingBuilder.build();
user.sendEmailVerification(settings).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Log.e("MAIL_VERIFICATION", "onComplete: mail verification sent" );
}else{
// not sent
}
}
});
在验证电子邮件时,我希望用户直接在应用程序中重定向(如果已安装),这就是我使用动态链接
的地方第二,我修改了Firebase电子邮件模板,以将我的动态链接用作操作URL。
,然后在发送给用户的电子邮件中,一些查询参数(例如oobCode,apiKey)将附加到动态链接。
当用户单击以上链接时,它会正确地重定向到应用程序并打开已注册的活动以接收动态链接。
我的真正问题是,如何从Android应用程序获取发送给用户的链接中存在的所有查询参数。
到目前为止,我尝试过的方法都没有起作用: 方法1:尝试从Intent获取查询
FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent()).addOnSuccessListener(new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
Uri deepLink = null;
if(pendingDynamicLinkData != null){
deepLink = pendingDynamicLinkData.getLink();
}
// trying to get from the intent
if(deepLink != null){
Uri intentData = getIntent().getData();
if(intentData != null){
String code = getIntent().getStringExtra("oobCode"); // always returns null
}
}
}
});
方法2:尝试从PendingDynamicLinkData获取查询参数
FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent()).addOnSuccessListener(new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
Uri deepLink = null;
if(pendingDynamicLinkData != null){
deepLink = pendingDynamicLinkData.getLink();
}
// trying to get from the deep link URI
if(deepLink != null){
String code = deepLink.getQueryParameter("oobCode"); // returns null too
}
}
});
以下是我的manifest.xml
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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="@string/app_link_domain"
android:scheme="https"
/>
</intent-filter>
</activity>
答案 0 :(得分:0)
不是官方答案 - 仅根据我的经验 - 附加到动态链接本身的查询参数不会传递到您的深层链接。解决方案:如果您想将查询参数附加到您的深层链接(用户被动态链接定向到的实际 url),您需要做的是在创建动态链接时附加这些参数。在您的情况下 - 而不是“https://leliberalpress.com/verification”,您应该在创建链接时在 firebase 控制台中定义:“https://leliberalpress.com/verification?some_param=some_value&another_param=some_other_value” 动态链接本身没有查询参数 - 即:“https://leliberalpress.page.link/XktS”