web-dev-qa-db-fra.com

Firebase Dynamic Link prend en charge les paramètres personnalisés?

J'écris une application pour une conférence Open Source.

À l’origine, chaque participant recevrait un lien différent par courrier électronique ou SMS, comme

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

puis utilisez ce lien pour ouvrir l'application, nous pouvons savoir quel utilisateur est le participant par le jeton.

Firebase publie une nouvelle fonctionnalité Dynamic Links dans I/O 2016, qui offre une meilleure expérience aux utilisateurs.

J'avais essayé cela, mais je ne trouvais aucun moyen de passer les paramètres personnalisés (le jeton) dans les liens dynamiques, comment utiliser le même lien avec des paramètres différents pour mes utilisateurs?

Merci.

15
Denny Huang

Je ne pense pas que vous puissiez utiliser l'URL courte: https://<my app>.app.goo.gl/Gk3m À moins d'en créer une pour chaque utilisateur, mais vous pouvez utiliser l'URL longue: https://<my app>.app.goo.gl/?link=https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17 ...(add other parameters as needed) Et définir un nouveau jeton pour chaque utilisateur.

Je suppose que vous générez les jetons automatiquement. Dans ce cas, vous pouvez utiliser this pour raccourcir les liens.

22
diidu

Vous pouvez désormais créer des liens courts à l'aide du SDK Firebase via FirebaseDynamicLinks.getInstance().createDynamicLink(): https://firebase.google.com/docs/dynamic-links/Android/create

Exemple de code:

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
            }
        }
    });
5
Shirane85

Si vous souhaitez utiliser des liens dynamiques avec des arguments personnalisés avec REST, voici un exemple de charge utile:

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

Assurez-vous que votre suppression «https: //» de votre dynamicLinkDomain

Julien

2
JulienCoo

Vous pouvez ajouter un paramètre supplémentaire à votre lien pour générer une URL courte à partir de Firebase . Voici un exemple de génération d'URL courte à l'aide de l'API Firebase .

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();
    }

Dans votre activité de réception:

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.");
                            }
                        }
                    });
2
Naveen Kumar M

Pas besoin de toute la hâte

  1. Ne pas raccourcir l'URL si vous voulez passer des paramètres
  2. Écrivez les liens comme ceci.

    String link = " https://APP_CODE.app.goo.gl/?refferer= " + userId;

    //APP_CODE is firebase link
    
     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);
    
0
Job M

1 Commencez par modifier votre lien dynamique dans la console firebase de http: // exampleandroid/test à http: // exampleandroid/test? Data 2. Vous envoyez les données du paramètre de requête avec cette

 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();
0
Dishant Kawatra

J'ai essayé tout ce qui précède mais aucun travail. Donc, je pense que vous devriez changer le lien http://example.com/?userid=123tohttp://example.com/userid/123

0
chii