web-dev-qa-db-ja.com

Firebaseディープリンクの短いURL

Firebaseディープリンクのリンクを短くできますか?彼らはその機能を持っていますか?生成されたリンクが長すぎて、それは良くありません。

13
shibapoo

[〜#〜]更新[〜#〜]

Firebaseで短縮ダイナミックリンクがサポートされるようになりました プログラムで

プログラムでダイナミックリンクを作成するときに、長くてユーザーフレンドリーではないURLを取得する同じ問題に直面しました。

私が見つけた解決策は、素晴らしい動作をする Google URL Shortener API を使用することです。このリンクはJava=ライブラリを指します。Androidで使用していますが、簡単なhttpリクエストも実行できます。

必要に応じて、Androidコードを投稿します。

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);

}

それが役に立てば幸い!!

12
MrBrightside

リンクは、Firebaseコンソールの[ダイナミックリンク]タブで短縮できます。 [新しいダイナミックリンク]をタップすると、既存のリンクからショートリンクを作成するオプションが表示されます。

2
Arun Venkatesan

これは、Firebase Dynamic Links REST APIを使用してプログラムで実行できます。たとえば、次のようになります。

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

https://firebase.google.com/docs/dynamic-links/short-links を参照してください

そして、私はAndroidのためにそれをコード化する必要がありました-これが誰かを助ける場合のコードです:

アクティビティの上部:

lateinit private var dynamicLinkApi: FbDynamicLinkApi

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

onCreate(実際にはそうではありませんが、単純にするために、実際には注入する必要があります):

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)

次に、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) })

OnDestroyで登録解除することを忘れないでください:

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

そして、動的APIに必要なクラスは次のとおりです。

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

これを試してください、私の場合はうまく機能します 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'

1

現在のところ、これはプログラムで行うことはできません。

0
shibapoo