it-swarm.com.de

Firebase Deep Link kurze URL

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.

11
pixiedust

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!!

12
MrBrightside

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.

2
Arun Venkatesan

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)
2
MrBigglesworth

Dies kann derzeit nicht programmgesteuert erfolgen. 

0
pixiedust

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' 

0