Können die Links für Firebase-Deep-Links gekürzt werden? Haben sie diese Funktion? Generierte Links sind zu lang und das ist nicht gut.
UPDATE
Firebase unterstützt jetzt die Verkürzung dynamischer Links programmgesteuert .
Ich hatte das gleiche Problem, eine lange und nicht benutzerfreundliche URL zu erhalten, wenn ein dynamischer Link programmgesteuert erstellt wurde.
Die Lösung, die ich gefunden habe, ist die Verwendung der Google URL Shortener-API , die hervorragend funktioniert. Der Link verweist auf die Java-Bibliothek. Ich verwende sie in Android, aber Sie können auch eine einfache http-Anfrage.
Ich werde meinen Android-Code posten, falls Sie ihn benötigen:
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);
}
Ich hoffe es hilft!!
Die Links können in der Firebase-Konsole auf der Registerkarte Dynamic Links gekürzt werden. Tippen Sie auf 'New Dynamic Link' (Neue dynamische Verknüpfung). Hier haben Sie die Möglichkeit, aus einer vorhandenen Verknüpfung eine kurze Verknüpfung zu erstellen.
Dies kann programmgesteuert mithilfe der Firebase Dynamic Links REST API durchgeführt werden. Beispiel:
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"
}
Siehe https://firebase.google.com/docs/dynamic-links/short-links
Und ich musste es nur für Android programmieren - hier ist der Code, falls es jemandem hilft:
an der Spitze der Aktivität:
lateinit private var dynamicLinkApi: FbDynamicLinkApi
private var remoteCallSub: Subscription? = null // in case activity is destroyed after remote call made
in onCreate (nicht wirklich, aber um es einfach zu halten, sollten Sie es tatsächlich injizieren):
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)
dann, wenn es Zeit ist, eine URL zu verkürzen:
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) })
Vergessen Sie nicht, onDestroy abzumelden:
override fun onDestroy() {
super.onDestroy()
remoteCallSub?.unsubscribe()
}
Und hier sind die Klassen, die Sie für die dynamische API benötigen:
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)
Dies kann derzeit nicht programmgesteuert erfolgen.
Probieren Sie dies aus, es funktioniert in meinem Fall gut, 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'