【问题标题】:Firebase Deep Link short URLFirebase 深层链接短网址
【发布时间】:2016-05-31 15:11:53
【问题描述】:

可以缩短 Firebase 深层链接的链接吗?他们有这个功能吗?生成的链接太长,不好。

【问题讨论】:

    标签: firebase firebase-dynamic-links


    【解决方案1】:

    更新

    Firebase 现在支持缩短动态链接 programmatically

    在以编程方式创建动态链接时,我遇到了同样的问题,即获取一个长且用户不友好的 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);
    
    }
    

    希望对你有帮助!!

    【讨论】:

    【解决方案2】:

    可以在 Firebase 控制台的“动态链接”标签中缩短链接。点击“新建动态链接”,您可以选择从现有链接创建短链接。

    【讨论】:

    • 但是我们可以通过编程方式做到这一点吗?如果我想在 Facebook 上分享我的链接,它会有很长的链接
    • 那么为什么不能在 Firebase 控制台上生成短链接并在 facebook 上分享该链接?
    • @user14202a 是的,您是对的 - 今天无法以编程方式完成。提交了功能请求。请留意这方面的更多更新。
    【解决方案3】:

    这可以使用 Firebase 动态链接 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)
    

    【讨论】:

    • 这是java吗?我认为是 JavaScript。
    • 这是 Kotlin。
    • 谢谢!我对此一无所知。
    【解决方案4】:

    试试这个,在我的情况下它工作正常, 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"
        }
      }
    }
    

    '内容类型:文本/纯文本'

    【讨论】:

      【解决方案5】:

      目前无法以编程方式完成此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-21
        • 2013-05-12
        • 2022-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多