如何在Android APP中从Firebase动态链接(FDL)读取查询参数

时间:2020-02-02 09:52:37

标签: android firebase firebase-dynamic-links

我正在开发一个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控制台中创建动态链接 enter image description here

第二,我修改了Firebase电子邮件模板,以将我的动态链接用作操作URL。 enter image description here

,然后在发送给用户的电子邮件中,一些查询参数(例如oobCode,apiKey)将附加到动态链接。 enter image description here

当用户单击以上链接时,它会正确地重定向到应用程序并打开已注册的活动以接收动态链接。

我的真正问题是,如何从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>

1 个答案:

答案 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”