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.
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.
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 !!
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.
Mais peut-on faire programme? Si je veux partager mon lien sur Facebook, il aura de longs liens – user142020a
Alors pourquoi ne pas générer le lien court sur la console Firebase et partager ce lien sur facebook? – diidu
@ 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. –
Cela ne peut pas être fait par programmation pour le moment.
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)
Est-ce java? Je pense que c'est JavaScript. –
Voici Kotlin. – MrBigglesworth
Merci! Je ne sais rien à ce sujet. –
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?
J'ai vu cette erreur lors de l'utilisation de l'exemple, mais tout fonctionne lorsque vous utilisez une clé valide et valide longDynamicLink. –
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'
Merci pour le partage, @MrBrightside! :) – user142020a