android - 无法从共享的 firebase 动态链接中获取 'deepLink.getQueryParameter(".. .")'

标签 android firebase-dynamic-links

我正在开发动态链接以共享页面内容,以便从另一台设备直接在同一应用程序中打开它。 当我创建共享动态链接时,我添加了查询参数“hotelId”, 但是当我单击共享链接并尝试打开链接时,应用程序正常打开,但 deepLink.getQueryParameter("hotelId") 始终返回 null。 这是我的代码:

生成动态链接(DetailActivity)

onCreate(){
...

   DynamicLink dynamicLink = 
   FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLink(Uri.parse("www.example.com"))
            .setDynamicLinkDomain("example.page.link/hotelDetail?hotelId="+hotelId)
            // Open links with this app on Android
            .setAndroidParameters(new 
    DynamicLink.AndroidParameters.Builder().build())
            // Open links with com.example.ios on iOS
            .setIosParameters(new 
    DynamicLink.IosParameters.Builder("com.example.exampleDark").build())
            .buildDynamicLink();

    Uri dynamicLinkUri = dynamicLink.getUri();
    Log.e("DynamicLink -",dynamicLinkUri.toString());

   //Share Dynamic Link
   try {
        URL url = new URL(URLDecoder.decode(myDynamicLink.toString(), "UTF-8"));
        Log.i("Share Link", "URL = :"+url.toString());

        // [START ddl_share_link]
        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Firebase Deep Link");
        //String msg = "Hey, check this out: \n" + link;
        sendIntent.putExtra(Intent.EXTRA_TEXT, url.toString());

        startActivity(sendIntent);
        // [END ddl_share_link]

        } catch (Exception e) {
           e.printStackTrace();
           Log.i(TAG, "Could not decode Uri: " + e.getLocalizedMessage());
        }
 ...
 }

更新 manifest.xml 以接收动态链接

    <activity
        android:name=".DetailActivity"
        android:launchMode="singleTask"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <!-- [START link_intent_filter] -->

        <!-- handle website links -->
        <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="example.page.link" android:scheme="http"/>
            <data android:host="example.page.link" android:scheme="https"/>
        </intent-filter>
        <!-- [END link_intent_filter] -->
    </activity>

从共享 URL (DetailActivity) 获取动态链接

FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(this, new 
    OnSuccessListener<PendingDynamicLinkData>() {
                @Override
                public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                    Uri deepLink = null;
                    if (pendingDynamicLinkData != null) {
                        deepLink = pendingDynamicLinkData.getLink();
                        String path = deepLink.getPath();

                        //if(path.equals("/hotelDetail")){
                        String hId = deepLink.getQueryParameter("hotelId");

                        Log.i("Get Parameters", " Hotel = :" + hId + " Offer = :");

                    } else {
                        Log.i("Get Parameters", "No Hotel Link");
                    }

                }
            })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.i("Get Parameters", "getDynamicLink:onFailure", e);
                }
            });

在我的 Firebase 控制台上定义的值

URL Link - https://example.page.link/hotelDetail
Dynamic Link - https://example.page.link/hotelDetail?hotelId 

分享内容后,我得到以下链接作为动态链接(共享链接)

 https://example.page.link/hotelDetail?hotelId=6q7a99a78d7fb63f330g2w6d?apn=myapp.com.myapp&ibi=com.example.exampleDark&link=www.example.com

我想要的是,当我单击共享链接时,我想从共享链接中获取 DetailActivity 的“hotelId”值。

任何人都可以帮我解决我所缺少的吗? 提前致谢

最佳答案

抱歉回答晚了。遇到了同样的问题,所以我把这个留给其他人。

您应该从 Intent 中获取查询参数

intent.getData().getQueryParameter(hotelId);

deepLink.getQueryParameter("hotelId");

永远是null因为

pendingDynamicLinkData.getLink();

将只返回您的短动态链接,即

https://example.page.link/hotelDetail

关于android - 无法从共享的 firebase 动态链接中获取 'deepLink.getQueryParameter(".. .")',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634998/

相关文章:

android - 在Android小部件中以编程方式设置文本样式的方法?

android - 如何进行 10 次快速点击 [UIautomator]

android - Firebase 动态链接生命周期

android - Dagger 2注入(inject)方式

android - 如何在Xamarin.Android中创建实时数据?

java - Android 对话框 Button.setonClickListener

android - Firebase 动态链接和 android 导航架构组件

Firebase 动态链接。如何删除 page.link 的自定义子域

android - 动态创建的 Firebase 动态链接在 Android 上不起作用

ios - iOS 中的 Firebase.google.com Firebase 动态链接 (Swift)