Динамическая ссылка Firebase поддерживает специальные параметры?

Я пишу приложение для конференции с открытым исходным кодом.

Первоначально каждый участник получит другую ссылку по электронной почте или SMS, например

https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17

затем используйте эту ссылку, чтобы открыть приложение, мы можем узнать, какой участник является пользователем по токену.

Firebase выпустила новую функцию Dynamic Links в I / O 2016, которая обеспечивает лучший опыт для пользователей.

Я пробовал это, но я не могу найти способ передать пользовательские параметры (токен) в динамических ссылках, как использовать одну и ту же ссылку с разными параметрами для моих пользователей?

Спасибо.


person Denny Huang    schedule 09.07.2016    source источник


Ответы (10)


Я не думаю, что вы можете использовать короткий url: https://<my app>.app.goo.gl/Gk3m, если вы не создадите его для каждого пользователя, но вы можете использовать длинный url: https://<my app>.app.goo.gl/?link=https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17 ...(add other parameters as needed) и установить новый токен для каждого пользователя.

Я предполагаю, что вы автоматически генерируете токены. В этом случае вы можете использовать this, чтобы сократить ссылки. .

person diidu    schedule 05.08.2016
comment
@diidu как я могу использовать в c #? пожалуйста помоги - person Brijesh Mavani; 13.04.2018
comment
@BrijeshMavani Я не разбираюсь в C #, но мой ответ полностью не зависит от языка, поэтому вы можете использовать его на любом языке. - person diidu; 16.04.2018
comment
Я пробовал вот так: https: // ‹мое приложение› .app.goo.gl /? Link = example.com/[email protected] Это дает короткую ссылку как https: // ‹мое приложение› .app.goo.gl / abcd, после расшифровывая этот короткий URL, он выглядит как https: // ‹мое приложение› .app.goo.gl /? link = example.com/?name=test?email%[email protected]% 3D заменяет = после его декодирования. - person sreekanth kuriyala; 31.05.2018
comment
Как изменить токен с короткого URL? - person Oliver Dixon; 20.11.2019
comment
@OliverDixon Нет. Вы меняете его на длинный URL и при необходимости генерируете короткий. - person diidu; 21.11.2019
comment
Это мое решение для отправки / получения параметров с использованием длинного URL-адреса stackoverflow.com/a/59436486/2238515 - person Almeida; 22.12.2019
comment
@diidu В этом случае короткий URL-адрес бесполезен? - person Carlos Eduardo Ki Lee; 27.01.2020
comment
@CarlosEduardoKiLee Да. Тот, который сгенерирован на консоли Firebase, в этом случае бесполезен. - person diidu; 28.01.2020
comment
Так это не динамическая ссылка? Похоже на Deep Link. - person LacOniC; 03.03.2020
comment
Я не понимаю, мы создаем новую динамическую ссылку для каждого приглашения? - person Taha Malik; 30.01.2021

1) От https://console.firebase.google.com/ (здесь нет необходимости в специальных параметрах).

введите описание изображения здесь

2) Создайте где-нибудь ссылку, например. на вашей странице слияния (здесь мы добавляем наш параметр):

https://PROJECTNAME.page.link/?link=https://PROJECTNAME.page.link/LINKNAME?PARAMETER=1&ofl=https://www.PROJECTNAME.com/

ПАРАМЕТР - это ваш специальный параметр.

ofl - это ссылка, по которой можно перейти, если щелкнуть ссылку с другой платформы (ПК, Mac).

3) Получение данных о ссылках из кода Kotlin проекта Android:

Firebase.dynamicLinks
        .getDynamicLink(intent)
        .addOnSuccessListener { pendingDynamicLinkData ->
            val parameter: String =
                pendingDynamicLinkData?.link?.getQueryParameter("PARAMETER").orEmpty()
        }
person Eugene P.    schedule 29.05.2020
comment
У меня это не сработало. Может быть, потому что я использую FirebaseDynamicLinks.getInstance () вместо Firebase.dynamicLinks? - person Guilherme Oliveira; 03.06.2020
comment
Они что-то изменили (ребята из базы). Теперь при создании ссылки для щелчка используйте LINKNAME? PARAMETER вместо LINKNAME /? PARAMETER - person Eugene P.; 23.07.2020

Если вы хотите использовать динамические ссылки с настраиваемыми аргументами с REST, вот пример полезной нагрузки:

{
  "dynamicLinkInfo": {
        "dynamicLinkDomain": "example.app.goo.gl",
        "link": "http://someurl.com?my_first_param=test&my_second_param=test2"
  },
  "suffix": {
     "option":"UNGUESSABLE"
    }
}

Убедитесь, что вы удалили https: // из своего dynamicLinkDomain

Жюльен

person JulienCoo    schedule 18.04.2018
comment
и как получить его на принимающей стороне? Благодарю. - person niczm25; 02.05.2018
comment
После декодирования короткого URL-адреса параметры и символ не появляются - person sreekanth kuriyala; 31.05.2018

Теперь вы можете создавать короткие ссылки с помощью Firebase SDK через FirebaseDynamicLinks.getInstance().createDynamicLink(): https://firebase.google.com/docs/dynamic-links/android/create.

Образец кода:

Task shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
    .setLink(Uri.parse("https://example.com/"))
    .setDynamicLinkDomain("abc123.app.goo.gl")
    // Set parameters
    // ...
    .buildShortDynamicLink()
    .addOnCompleteListener(this, new OnCompleteListener() {
        @Override
        public void onComplete(@NonNull Task task) {
            if (task.isSuccessful()) {
                // Short link created
                Uri shortLink = task.getResult().getShortLink();
                Uri flowchartLink = task.getResult().getPreviewLink();
            } else {
                // Error
            }
        }
    });
person Shirane85    schedule 21.06.2017

В той части, где вы настраиваете динамическую ссылку, любой параметр, который вы добавляете к URL-адресу глубинной ссылки, будет доступен на всех платформах (веб, iOS, android)  введите описание изображения здесь

person Ted    schedule 30.01.2020
comment
Но тогда customParam1 всегда будет abc при передаче в приложение. Как это может быть динамичным? - person Silas; 28.01.2021
comment
@Silas вы нашли решение или знаете, как добиться динамических параметров? - person Taha Malik; 30.01.2021
comment
@Silas удалось добиться динамических параметров? - person Ajinkya Taranekar; 08.06.2021

Вы можете добавить дополнительный параметр к своей ссылке для создания короткого URL-адреса из Firebase. Здесь я привел пример создания коротких URL-адресов с помощью Firebase API. Здесь ServiceRequestHelper (this) .PostCall - это мой общий класс для выполнения запросов API.

String url = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=YOUR_KEY";

    try {
        PackageManager manager = this.getPackageManager();
        PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
        JSONObject jsonObject = new JSONObject();
        JSONObject androidInfoObject = new JSONObject();
        androidInfoObject.put("androidPackageName", getApplicationContext().getPackageName());
        androidInfoObject.put("androidMinPackageVersionCode",String.valueOf(info.versionCode));

        JSONObject iosInfoObject = new JSONObject();
        iosInfoObject.put("iosBundleId", "tettares.Test_ID");
        JSONObject dynamicLinkInfoObj = new JSONObject();
        dynamicLinkInfoObj.put("dynamicLinkDomain", "wgv3v.app.goo.gl");
        dynamicLinkInfoObj.put("link", "https://test.in/?UserId=14&UserName=Naveen");  // Pass your extra paramters to here
        dynamicLinkInfoObj.put("androidInfo", androidInfoObject);
        dynamicLinkInfoObj.put("iosInfo", iosInfoObject);

        JSONObject suffixObject = new JSONObject();
        suffixObject.put("option" , "SHORT");
        jsonObject.put("dynamicLinkInfo", dynamicLinkInfoObj);
        jsonObject.put("suffix", suffixObject);

        Log.d("JSON Object : " , jsonObject.toString());

        new ServiceRequestHelper(this).PostCall(url, jsonObject, false, new CallBackJson() {
            @Override
            public void done(JSONObject result) throws JSONException {

                try {
                    if (result.has("shortLink")) {
                        DEEP_LINK_URL = result.getString("shortLink");                                                   }
                } catch(Exception e)
                {
                    e.printStackTrace();
                }

            }
        });


    } catch (JSONException | PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }

В вашей активности получения:

boolean autoLaunchDeepLink = false;
    AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
            .setResultCallback(
                    new ResultCallback<AppInviteInvitationResult>() {
                        @Override
                        public void onResult(@NonNull AppInviteInvitationResult result) {
                            if (result.getStatus().isSuccess()) {
                                // Extract deep link from Intent
                                Intent intent = result.getInvitationIntent();
                                String deepLink = AppInviteReferral.getDeepLink(intent);

                                // Handle the deep link. For example, open the linked
                                // content, or apply promotional credit to the user's
                                // account.

                                // [START_EXCLUDE]
                                // Display deep link in the UI
                                Log.d(TAG, "deeplink URL: " + deeplink); // Here you get https://test.in/?UserId=14&UserName=Naveen
                                // [END_EXCLUDE]
                            } else {
                                Log.d(TAG, "getInvitation: no deep link found.");
                            }
                        }
                    });
person Naveen Kumar M    schedule 17.01.2017

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();
person Dishant Kawatra    schedule 30.01.2019

Я пробовал все вышеперечисленное, но ничего не помогло. Так что, думаю, стоит сменить ссылку http://example.com/?userid=123tohttp://example.com/userid/123

person chii    schedule 19.10.2018

Нет необходимости во всей суете

  1. Не сокращайте URL-адрес, если хотите передать параметры
  2. Пишите ссылки вот так.

    //APP_CODE is firebase link
    String link = "https://APP_CODE.app.goo.gl/?refferer=" + userId;
    
    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
                    .setMessage(getString(R.string.invitation_custom_message)))
                    .setDeepLink(Uri.parse(link))
                    .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
                    .setCallToActionText(getString(R.string.invitation_cta))
                    .build();
    
    startActivityForResult(intent, REQUEST_INVITE);
    
person Job M    schedule 24.05.2018

Для веб-приложений, генерирующих динамические ссылки.

const data = {
  dynamicLinkInfo: {
    domainUriPrefix: 'subdomain.page.link',
    link: url,
  },
  suffix: {
    option: 'SHORT'
  }
};
return fetch(`https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=${environment.firebaseConfig.apiKey}`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(data),
}).then(res => res.json()).then(response => response.shortLink).catch(console.error);
person Joshuva George Mohan Raj    schedule 21.10.2019