代码之家  ›  专栏  ›  技术社区  ›  Andrii Turkovskyi

向firebase动态链接中的链接添加查询参数

  •  0
  • Andrii Turkovskyi  · 技术社区  · 7 年前

    我创建了动态链接,我想发送一些特定的参数,比如: https://mydynamiclink/?link= “+链接+”&msgid=“+id+”&apn=myapn”。 link 字段看起来像“ https://play.google.com/store/apps/details/?id=com.myApp&msgid=myId&apn=myapn

    当我打开我的应用程序后,点击这个链接-我收到 PendingDynamicLinkData 可以从中获取链接,但不能获取一些自定义数据( pendingDynamicLinkData.getLink() https://play.google.com/store/apps/details/?id=com.myApp ")

    4 回复  |  直到 6 年前
        1
  •  4
  •   Andrii Turkovskyi    7 年前

    我找到了解决办法

    String query = "";
    try {
        query = URLEncoder.encode(String.format("&%1s=%2s", "msgid", id), "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    
    final String link = "https://play.google.com/store/apps/details/?id=com.myApp" + query;
    

    在这种编码之后 pendingDynamicLinkData.getLink() 还给我 https://play.google.com/store/apps/details/?id=com.myApp&msgid=myId

        2
  •  3
  •   Peterstev Uremgba    7 年前

    接受的答案对我来说不太好,我需要做的只是检查链接是否是针对用户的个人资料而不是博客文章,这样我就可以重定向到我的个人资料活动。

    private void generateDynamicLink() {
        //build link normally and add queries like a normal href link would
        String permLink = getLink() + "?route=profile&name=" + getProfileName()
                + "&category=" + getUserPracticeCategory()
                + "&picture=" + getProfilePicture();
    
        FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLink(Uri.parse(permLink))
                .setDynamicLinkDomain(Constants.DYNAMIC_LINK_DOMAIN)
                .setAndroidParameters(new 
        DynamicLink.AndroidParameters.Builder().build())
                .setSocialMetaTagParameters(
                        new DynamicLink.SocialMetaTagParameters.Builder()
                                .setTitle("Enter Title")
                                .setDescription("Enter Desc here")
                                .setImageUrl(Uri.parse(getProfilePicture()))
                                .build())
                .buildShortDynamicLink()
                .addOnCompleteListener(this, task -> {
                    if (task.isSuccessful()) {
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_SEND);
                        intent.putExtra(Intent.EXTRA_TEXT,task.getResult().getShortLink());
                        intent.setType("text/plain");
                        startActivity(intent);
                    } else {
                        Utils.snackBar(tvAddress, "Failed to Generate Profile Link, Try 
    Again");
                    }
                });
    }
    

    当用户使用生成的链接导航到我的应用程序时,它会转到“发布详细信息”活动,因为我使该活动成为清单中唯一可浏览的活动。然后,我必须使用route查询来确定传入的链接是博客文章还是共享用户配置文件。

    private void retrieveDynamicLink() {
        FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent())
                .addOnSuccessListener(this, pendingDynamicLinkData -> {
                    if (pendingDynamicLinkData == null) {
                        retrieveLocalIntent();
                    } else {
                        Toast.makeText(context, "Resolving Link, Please Wait...", Toast.LENGTH_LONG).show();
                        if (pendingDynamicLinkData.getLink().getQueryParameter("route") != null) {
                            if (Objects.requireNonNull(pendingDynamicLinkData.getLink().getQueryParameter("route")).equalsIgnoreCase("profile")) {
                                try {
                                    Uri uri = pendingDynamicLinkData.getLink();
                                    String permLink = uri.toString().split("\\?")[0];
                                    Intent intent = new Intent(this, ProfileActivity.class);
                                    intent.putExtra(ProfileActivity.PROFILE_NAME, uri.getQueryParameter("name"));
                                    intent.putExtra(ProfileActivity.PROFILE_CATEGORY, uri.getQueryParameter("category"));
                                    intent.putExtra(ProfileActivity.PROFILE_PICTURE, uri.getQueryParameter("picture"));
                                    intent.putExtra(Utils.POST_PERMLINK, permLink);
                                    startActivity(intent);
                                    this.finish();
                                } catch (NullPointerException e) {
                                    Toast.makeText(context, "Unable to View User Profile", Toast.LENGTH_SHORT).show();
                                }
                            }
                        } else {
                            postHrefLink = pendingDynamicLinkData.getLink().toString();
                            getPostDetail.getData(postHrefLink);
                        }
                    }
                })
                .addOnFailureListener(this, e ->
                        retrieveLocalIntent()
                );
    }
    

    希望这有帮助。

        3
  •  0
  •   Dishant Kawatra    7 年前

    1首先更改firebase控制台中的动态链接 http://exampleandroid/test http://exampleandroid/test?data 2.使用以下命令发送查询参数数据

     DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
                       // .setLink(dynamicLinkUri)
                        .setLink(Uri.parse("http://exampleandroid/test?data=dsads"))
                        .setDomainUriPrefix("https://App_Name.page.link")
                        // 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.appinventiv.ios").build())
                        .buildDynamicLink();
    
                dynamicLinkUri = dynamicLink.getUri();
    
        4
  •  -1
  •   Chandrakant Dvivedi    7 年前

    https://www.myawesomesite.com/turtles/types?type=1&sort=relevance#section-name

    为此,你可以做以下几点

     Uri.Builder builder = new Uri.Builder();
     builder.scheme("https")
    .authority("www.myawesomesite.com")
    .appendPath("turtles")
    .appendPath("types")
    .appendQueryParameter("type", "1")
    .appendQueryParameter("sort", "relevance")
    .fragment("section-name");
    
    String myUrl = builder.build().toString();
    
    推荐文章