2016-05-31 2 views
6

Les liens vers 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.Firebase Deep Link URL courte

Merci d'avance.

Répondre

8

MISE À JOUR

Firebase supporte désormais raccourcir les liens dynamiques programmatically.

J'ai rencontré le même problème en obtenant une URL longue et non conviviale lors de la création d'un lien dynamique par programmation.

La solution que j'ai trouvé est d'utiliser le Google URL Shortener API qui fonctionne génial. Ce lien pointe vers la bibliothèque Java, je l'utilise sous Android, mais vous pouvez aussi faire une simple requête http.

Je posterai mon code Android dans le cas où vous avez 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); 

} 

Hope it helps !!

+0

Merci pour le partage, @MrBrightside! :) – user142020a

2

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

+1

Mais peut-on faire programme? Si je veux partager mon lien sur Facebook, il aura de longs liens – user142020a

+0

Alors pourquoi ne pas générer le lien court sur la console Firebase et partager ce lien sur facebook? – diidu

+0

@ user14202a Oui vous avez raison - cela ne peut pas être fait par programmation aujourd'hui. Classé une demande de fonctionnalité. Attention à plus de mises à jour à ce sujet. –

0

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

2

Cela peut être fait par programmation de l'API Liens Dynamic Firebase 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

Je viens d'avoir à coder pour Android - est ici le code dans le cas où il aide quelqu'un:

au sommet de l'activité:

lateinit private var dynamicLinkApi: FbDynamicLinkApi 

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

à onCreate (pas vraiment, mais pour le garder simple, en fait, vous devez 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) 

puis 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) }) 

Ne pas oublier de résilier votre abonnement à 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) 
+0

Est-ce java? Je pense que c'est JavaScript. –

+0

Voici Kotlin. – MrBigglesworth

+0

Merci! Je ne sais rien à ce sujet. –

2
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" 
} 

cette retourne url:

{ 
    error =  { 
     code = 400; 
     message = "Request contains an invalid argument."; 
     status = "INVALID_ARGUMENT"; 
    }; 
} 

Avez-vous vu la même erreur?

+0

J'ai vu cette erreur lors de l'utilisation de l'exemple, mais tout fonctionne lorsque vous utilisez une clé valide et valide longDynamicLink. –

0

Essayez ceci, son 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'