如何在 android APP 中从 Firebase 动态链接 (FDL) 读取查询参数
How to read query parameters from Firebase dynamic links (FDL) in an android APP
我正在开发一个 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
}
}
});
在验证他们的电子邮件时,如果安装了应用程序,我希望用户直接在应用程序中重定向,这就是我使用 Dynamic link
的地方
首先,我首先在 firebase 控制台中创建一个动态 Link
其次,我修改了 firebase 电子邮件模板以使用我的动态 link 作为操作 url。
并且在发送给用户的电子邮件中,一些查询参数(例如:oobCode、apiKey)附加到动态 link。
当用户单击上面的 link 时,它会正确重定向到应用程序并打开注册接收动态 link 的 activity。
我真正的问题是,如何从 Android 应用程序中获取发送给用户的 link 中存在的所有查询参数。
到目前为止我尝试过但没有奏效的方法:
方法 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
}
}
}
});
方法二:尝试从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>
不是官方答案 - 仅根据我的经验 - 附加到动态 link 本身的查询参数不会传递给你的深层 link。解决方案:如果您想将查询参数附加到您的深度 link(用户通过动态 link 定向到的实际 url),您需要做的是在创建过程中附加这些参数的动态 link。在您的情况下 - 而不是“https://leliberalpress.com/verification”,您应该在创建 link 时在 firebase 控制台中定义:“https://leliberalpress.com/verification?some_param=some_value&another_param=some_other_value"
动态 link 本身保持没有查询参数 - 即保持:“https://leliberalpress.page.link/XktS”
我正在开发一个 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
}
}
});
在验证他们的电子邮件时,如果安装了应用程序,我希望用户直接在应用程序中重定向,这就是我使用 Dynamic link
的地方首先,我首先在 firebase 控制台中创建一个动态 Link
其次,我修改了 firebase 电子邮件模板以使用我的动态 link 作为操作 url。
并且在发送给用户的电子邮件中,一些查询参数(例如:oobCode、apiKey)附加到动态 link。
当用户单击上面的 link 时,它会正确重定向到应用程序并打开注册接收动态 link 的 activity。
我真正的问题是,如何从 Android 应用程序中获取发送给用户的 link 中存在的所有查询参数。
到目前为止我尝试过但没有奏效的方法: 方法 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
}
}
}
});
方法二:尝试从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>
不是官方答案 - 仅根据我的经验 - 附加到动态 link 本身的查询参数不会传递给你的深层 link。解决方案:如果您想将查询参数附加到您的深度 link(用户通过动态 link 定向到的实际 url),您需要做的是在创建过程中附加这些参数的动态 link。在您的情况下 - 而不是“https://leliberalpress.com/verification”,您应该在创建 link 时在 firebase 控制台中定义:“https://leliberalpress.com/verification?some_param=some_value&another_param=some_other_value" 动态 link 本身保持没有查询参数 - 即保持:“https://leliberalpress.page.link/XktS”