Firebaseディープリンクのリンクを短くできますか?彼らはその機能を持っていますか?生成されたリンクが長すぎて、それは良くありません。
[〜#〜]更新[〜#〜]
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);
}
それが役に立てば幸い!!
リンクは、Firebaseコンソールの[ダイナミックリンク]タブで短縮できます。 [新しいダイナミックリンク]をタップすると、既存のリンクからショートリンクを作成するオプションが表示されます。
これは、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)
これを試してください、私の場合はうまく機能します 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'
現在のところ、これはプログラムで行うことはできません。