将查询参数添加到 Firebase 动态链接中的链接
Posted
技术标签:
【中文标题】将查询参数添加到 Firebase 动态链接中的链接【英文标题】:Add query parameters to link in firebase dynamic link 【发布时间】:2018-10-23 07:36:29 【问题描述】:我创建了动态链接,我想发送一些特定的参数,比如:
"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()
返回我的链接,但没有 "&msgid=..." - 我得到字符串 "https://play.google.com/store/apps/details/?id=com.myApp")
我怎样才能添加我的 msgid 字段并获得它呢?
【问题讨论】:
【参考方案1】:我找到了解决办法
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
【讨论】:
这是我使用长url***.com/a/59436486/2238515发送/接收参数的解决方案 正如我所写,pendingDynamicLinkData.getLink()
不适合我。【参考方案2】:
接受的答案对我来说不是很好,我需要做的就是检查链接是否用于用户的个人资料而不是博客文章,因此我可以重定向到我的 ProfileActivity。
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");
);
当用户使用生成的链接导航到我的应用程序时,它会转到发布详细信息活动,因为我将该活动设置为清单中唯一的可浏览活动。然后我必须使用路由查询来确定传入链接是博客文章还是共享用户配置文件。
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】: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】:假设您要创建以下 URL:
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();
【讨论】:
问题与建立链接无关。我有我的链接,我尝试将它添加到 firebase 动态链接。当我从动态链接中获取 PendingDynamicLinkData 时,我可以从中检索我的链接。但是我的链接没有需要的参数(msgId)以上是关于将查询参数添加到 Firebase 动态链接中的链接的主要内容,如果未能解决你的问题,请参考以下文章
适用于 iOS 的 Firebase 动态链接 - 查询参数未从 iTunes Store 传递
为啥 Firebase 动态链接的 longDynamicLink 参数中链接中的编码空格字符 (%20) 更改为 %2B