web-dev-qa-db-fra.com

URL courte Firebase Deep Link

Les liens pour les liens profonds Firebase peuvent-ils être raccourcis? Ont-ils cette fonctionnalité? Les liens générés sont trop longs et ce n'est pas bon.

11
pixiedust

METTRE À JOUR

Firebase prend désormais en charge le raccourcissement des liens dynamiques par programmation .

J'ai eu le même problème pour obtenir une URL longue et peu conviviale lors de la création d'un lien dynamique par programme.

La solution que j'ai trouvée consiste à utiliser le API Google URL Shortener qui fonctionne parfaitement ... Ce lien pointe vers la bibliothèque Java, je l'utilise sous Android, mais vous pouvez également effectuer une simple requête http .

Je posterai mon code Android au cas où vous en auriez besoin:

private void createDynamicLink() {
    // 1. Create the dynamic link as usual
    String packageName = getApplicationContext().getPackageName();
    String deepLink = "YOUR DEEPLINK";
    Uri.Builder builder = new Uri.Builder()
            .scheme("https")
            .authority(YOUR_DL_DOMAIN)
            .path("/")
            .appendQueryParameter("link", deepLink)
            .appendQueryParameter("apn", packageName);

    final Uri uri = builder.build();

//2. Create a shorten URL from the dynamic link created.

    Urlshortener.Builder builderShortener = new Urlshortener.Builder (AndroidHttp.newCompatibleTransport(), AndroidJsonFactory.getDefaultInstance(), null);
    final Urlshortener urlshortener = builderShortener.build();

    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
            Url url = new Url();
            url.setLongUrl(uri.toString());
            try {
                Urlshortener.Url.Insert insert=urlshortener.url().insert(url);
                insert.setKey("YOUR_API_KEY");
                url = insert.execute();
                Log.e("url.getId()", url.getId());
                return url.getId();
            } catch (IOException e) {
                e.printStackTrace();
                return uri.toString();
            }
        }

        @Override
        protected void onPostExecute(String dynamicLink) {
            Intent sharingIntent = new Intent(Android.content.Intent.ACTION_SEND);
            sharingIntent.setType("text/plain");
            sharingIntent.putExtra(Android.content.Intent.EXTRA_SUBJECT, getResources().getString(R.string.share_subject));
            sharingIntent.putExtra(Android.content.Intent.EXTRA_TEXT, dynamicLink);
            startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.share_using)));
            Log.e("dynamicLink", dynamicLink);
        }
    }.execute(null, null, null);

}

J'espère que ça aide!!

12
MrBrightside

Les liens peuvent être raccourcis dans la console Firebase dans l’onglet Liens dynamiques. Appuyez sur "Nouveau lien dynamique", ce qui vous permet de créer un lien court à partir d'un lien existant.

2
Arun Venkatesan

Cela peut être effectué par programme à l'aide de l'API Firebase Dynamic Links REST, par exemple:

POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=api_key
Content-Type: application/json

{
   "longDynamicLink": "https://abc123.app.goo.gl/?link=https://example.com/&apn=com.example.Android&ibi=com.example.ios"
}

Voir https://firebase.google.com/docs/dynamic-links/short-links

Et je venais de le coder pour Android - voici le code au cas où cela aiderait quelqu'un:

en haut de l'activité:

lateinit private var dynamicLinkApi: FbDynamicLinkApi

private var remoteCallSub: Subscription? = null // in case activity is destroyed after remote call made

dans onCreate (pas vraiment mais pour que ce soit simple, vous devriez plutôt l'injecter):

val BASE_URL = "https://firebasedynamiclinks.googleapis.com/"

val retrofit = Retrofit.Builder().baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
            .build()

dynamicLinkApi = retrofit.create(FbDynamicLinkApi::class.Java)

alors quand il est temps de raccourcir une URL:

remoteCallSub = dynamicLinkApi.shortenUrl(getString(R.string.fbWebApiKey), UrlRo(dynamicLink))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    { url -> Log.d("Shortened: $url") },
                    { e -> Log.e("APP","Error with dynamic link REST api", e) })

N'oubliez pas de vous désabonner de onDestroy:

override fun onDestroy() {
    super.onDestroy()
    remoteCallSub?.unsubscribe()
}

Et voici les classes dont vous avez besoin pour l'API dynamique:

interface FbDynamicLinkApi {
    @POST("v1/shortLinks")
    fun shortenUrl(@Query("key") key: String, @Body urlRo: UrlRo): Observable<ShortUrlRo>
}

data class UrlRo(val longDynamicLink: String, val suffix: SuffixRo = SuffixRo())
data class SuffixRo(val option: String = "UNGUESSABLE")

data class ShortUrlRo(val shortLink: String, val warnings: List<WarningRo>, val previewLink: String)
data class WarningRo(val warningCode: String, val warningMessage: String)
2
MrBigglesworth

Cela ne peut pas être fait par programme pour le moment. 

0
pixiedust

Essayez ceci, cela fonctionne bien dans mon cas, https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=[api-key]

{
  "dynamicLinkInfo": {
    "dynamicLinkDomain": "peg3z.app.goo.gl",
    "link": "[Your Long Url Which you want to make short]",
    "androidInfo": {
      "androidPackageName": "com.xyz"//
    },
    "iosInfo": {
      "iosBundleId": "com.dci.xyz"
    }
  }
}

'Content-Type: text/plain' 

0
Dharmendra singh