【问题标题】:How get extra parameter from dynamic link using Firebase?如何使用 Firebase 从动态链接中获取额外参数?
【发布时间】:2016-07-07 16:53:10
【问题描述】:

我手动创建了动态链接,并在链接上设置了一些附加参数,例如:https://XXXXX.goo.gl/?link=https%3A%2F%2Fairbanq.send.com%2Fsendmoney&apn=com.xxxx.xxxx&amv=1&username=Adri&amount=7.00

但是当应用程序打开时,我只得到:“https://airbanq.send.com/sendmoney” 没有附加参数

我正在使用此示例代码 https://github.com/firebase/quickstart-android/tree/master/dynamiclinks

请帮忙,

谢谢

我的代码

public String buildDeepLink() {
    // Get the unique appcode for this app.
    String appCode = AirBanqApp.mContext.getString(R.string.app_code);

    // Get this app's package name.
    String packageName = AirBanqApp.mContext.getPackageName();

    // Build the link with all required parameters
    Uri.Builder builder = new Uri.Builder()
            .scheme("https")
            .authority(appCode + ".app.goo.gl")
            .path("/")
            .appendQueryParameter("link", deepLink)
            .appendQueryParameter("apn", packageName);

    // If the deep link is used in an advertisement, this value must be set to 1.
    if (isAd) {
        builder.appendQueryParameter("ad", "1");
    }

    // Minimum version is optional.
    if (minVersion > 0) {
        builder.appendQueryParameter("amv", Integer.toString(minVersion));
    }

    if (!TextUtils.isEmpty(androidLink)) {
        builder.appendQueryParameter("al", androidLink);
    }

    if (!TextUtils.isEmpty(playStoreAppLink)) {
        builder.appendQueryParameter("afl", playStoreAppLink);
    }

    if (!customParameters.isEmpty()) {
        for (Map.Entry<String, String> parameter : customParameters.entrySet()) {
            builder.appendQueryParameter(parameter.getKey(), parameter.getValue());
        }
    }

    // Return the completed deep link.
    return builder.build().toString();
}

【问题讨论】:

  • 您能否粘贴一些代码,向我们展示您如何获得您所获得的东西? ...只是相关部分。
  • 我解决了我的问题,谢谢,我会在修复前后发布我的代码
  • 我们可以使用 Firebase POST URl 生成参考这个答案link
  • 酷,谢谢 Naveen

标签: android firebase firebase-dynamic-links


【解决方案1】:

这就是我的解决方案

我解决了我的问题,我假设“apn”、“用户名”和“金额”它们是 url 中参数“LINK”的一部分,但是当我添加“&”时,我正在向主 url,要向“LINK”字段添加参数,我需要先创建这样的 url

https://airbanq.send.com/sendmoney?username=Adri&amount=7.00

然后使用 URLEncoder.encode(queryParameters.toString(), "UTF-8"); 生成这个 https%3A%2F%2Fairbanq.send.com%2Fsendmoney%253Fusername%253DAdri%2526amount%253D7.00

然后追加到主网址

https://xxxx.app.goo.gl/?link=https%3A%2F%2Fairbanq.send.com%2Fsendmoney%253Fusername%253DAdri%2526amount%253D7.00&apn=com.airbanq.airbanqapp&amv=1

 public String buildDeepLink() {
    // Get the unique appcode for this app.
    String appCode = AirBanqApp.mContext.getString(R.string.app_code);

    // Get this app's package name.
    String packageName = AirBanqApp.mContext.getPackageName();
    String queryParamters = "";
    try {
        queryParamters = generateQueryParameters();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    if (!TextUtils.isEmpty(queryParamters)) {
        deepLink = deepLink + queryParamters;
    }
    // Build the link with all required parameters
    Uri.Builder builder = new Uri.Builder()
            .scheme("https")
            .authority(appCode + ".app.goo.gl")
            .path("/")
            .appendQueryParameter("link", deepLink)
            .appendQueryParameter("apn", packageName);

    // If the deep link is used in an advertisement, this value must be set to 1.
    if (isAd) {
        builder.appendQueryParameter("ad", "1");
    }

    // Minimum version is optional.
    if (minVersion > 0) {
        builder.appendQueryParameter("amv", Integer.toString(minVersion));
    }

    if (!TextUtils.isEmpty(androidLink)) {
        builder.appendQueryParameter("al", androidLink);
    }

    if (!TextUtils.isEmpty(playStoreAppLink)) {
        builder.appendQueryParameter("afl", playStoreAppLink);
    }

    // Return the completed deep link.
    return builder.build().toString();
}

private String generateQueryParameters() throws UnsupportedEncodingException {
    StringBuilder queryParameters = new StringBuilder();
    //server purposes
    queryParameters.append("?*code*");

    if (!customParameters.isEmpty()) {
        for (Map.Entry<String, String> parameter : customParameters.entrySet()) {
            queryParameters.append(String.format("&%1s=%2s", parameter.getKey(), parameter.getValue()));
        }
    }
    return URLEncoder.encode(queryParameters.toString(), "UTF-8");
}

【讨论】:

【解决方案2】:

官方的回答是,您需要对 URL 字符串进行转义/编码,以便将其安全地放置在 URL 查询中。 我希望 Firebase 动态链接能说明链接。

对于 Go 语言: url.QueryEscape(urlstring)

【讨论】:

    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2017-02-16
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多