Firebase dynamic links 核心的思想和接入之路

最近因?yàn)轫?xiàng)目需求,需要接入firebase dynamic links來(lái)增加推廣渠道和升級(jí)用戶體驗(yàn),剛開(kāi)始對(duì)這個(gè)深層動(dòng)態(tài)鏈接是一臉懵逼的,完全不知道它的核心思想和用法,然后就去官方開(kāi)發(fā)者文檔里看了之后,終于大概理解了它的核心思想,官方文檔面熟的比較詳細(xì):https://firebase.google.com/docs/dynamic-links/,我個(gè)人描述就是,跨平臺(tái),無(wú)論web、iOS或者Android都可以通過(guò)動(dòng)態(tài)鏈接來(lái)進(jìn)入到app的對(duì)應(yīng)的頁(yè)面(前提是已下載了app,如果沒(méi)下載,一般是設(shè)置跳到應(yīng)用商店)

接入步驟:
1.首先注冊(cè)并登陸firebase console 控制臺(tái),然后創(chuàng)建動(dòng)態(tài)鏈接

Paste_Image.png
Paste_Image.png

2.重點(diǎn)一步設(shè)置SHA-1 或者SHA-256 (控制臺(tái)的設(shè)置》項(xiàng)目設(shè)置》指紋證書(shū))
由于我的google console 里面設(shè)置了SHA-1,如果這里也設(shè)置SHA-1會(huì)報(bào)沖突,建議設(shè)置SHA-256


Paste_Image.png
Paste_Image.png

3.控制臺(tái)的配置配置好后,剩下的就是代碼了
注入依賴: compile 'com.google.firebase:firebase-invites:11.0.2'
manifest 里面的配置,記得這個(gè)配置在你處理回調(diào)的那個(gè)類(lèi)里:

 <activity android:name=".ui.MainActivity">
        <!-- [START link_intent_filter] -->
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="www.quickgame.com"
                android:pathPrefix="/index_dynamic_links"
                android:scheme="https" />
        </intent-filter>
        <!-- [END link_intent_filter] -->
        </activity>
/**
     * firebase dynamic links
     * create and receive
     */
    private void initDynamicLinks() {
        // Create a deep link and display it in the UI
        Uri deepLink = buildDeepLink(Uri.parse(Conf.DEEP_LINK_URL), 0, false);
        // TODO: 2017/9/5 the deepLink should be share
//        shareDeepLink(deepLink.toString()); // 一般是把這個(gè)深層鏈接分享出去
        // [END_EXCLUDE]

        // [START get_deep_link]  // 當(dāng)用戶點(diǎn)擊分享出去的深層鏈接會(huì)走這個(gè)回調(diào)
        FirebaseDynamicLinks.getInstance()
                .getDynamicLink(getIntent())
                .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                    @Override
                    public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                        // Get deep link from result (may be null if no link is found)
                        Uri deepLink = null;
                        if (pendingDynamicLinkData != null) {
                            deepLink = pendingDynamicLinkData.getLink();
                        }
                        // Handle the deep link. For example, open the linked
                        // content, or apply promotional credit to the user's
                        // account.
                        // ...

                        // [START_EXCLUDE]
                        // Display deep link in the UI
                        if (deepLink != null) {
                            // TODO: 2017/9/5 獲取回調(diào)后的深層鏈接并做對(duì)應(yīng)處理(跳轉(zhuǎn)或者其他)
                            showLog("deeplink=====" + deepLink.toString());
                        } else {
                            showLog("getDynamicLink: no link found");
                        }
                        // [END_EXCLUDE]
                    }
                })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        showLog("getDynamicLink:onFailure" + e);
                    }
                });
        // [END get_deep_link]

 /**
     *創(chuàng)建深層鏈接,用于分享出去或者其他
     * Build a Firebase Dynamic Link.
     * https://firebase.google.com/docs/dynamic-links/android/create#create-a-dynamic-link-from-parameters
     *
     * @param deepLink   the deep link your app will open. This link must be a valid URL and use the
     *                   HTTP or HTTPS scheme.
     * @param minVersion the {@code versionCode} of the minimum version of your app that can open
     *                   the deep link. If the installed app is an older version, the user is taken
     *                   to the Play store to upgrade the app. Pass 0 if you do not
     *                   require a minimum version.
     * @return a {@link Uri} representing a properly formed deep link.
     */
    @VisibleForTesting
    public Uri buildDeepLink(@NonNull Uri deepLink, int minVersion,  boolean isAd) {
        // Get the unique appcode for this app.
        String appCode = getString(R.string.deeplink_app_code);

        // Get this app's package name.
        String packageName = getApplicationContext().getPackageName();

        // Build the link with all required parameters
        Uri.Builder builder = new Uri.Builder()
                .scheme("https")
                .authority(appCode + ".app.goo.gl")
                .path("/")
                .appendQueryParameter("link", deepLink.toString())
                .appendQueryParameter("apn", packageName);

        // If the deep link is used in an advertisement, this value must be set to 1.
        if (isAd) {
            builder.appendQueryParameter("ad", "1");
        }

        // Minimum version is optional.
        if (minVersion > 0) {
            builder.appendQueryParameter("amv", Integer.toString(minVersion));
        }

        return builder.build();
    }

    private void shareDeepLink(String deepLink) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_SUBJECT, "Firebase Deep Link");
        intent.putExtra(Intent.EXTRA_TEXT, deepLink);
        startActivity(intent);
    }

參考的文章:
https://github.com/firebase/quickstart-android/tree/master/dynamiclinks
http://www.studyjamscn.com/article-18-1.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,781評(píng)論 25 709
  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,993評(píng)論 7 249
  • 目錄 曙光初現(xiàn) 05 丁愛(ài)回到上海的時(shí)候,劉云和孫莉莉恰好都沒(méi)有出去,這么長(zhǎng)時(shí)間以來(lái),三個(gè)人相處得還不錯(cuò)。她們問(wèn)起...
    南歌吟閱讀 374評(píng)論 3 6
  • 上回,主要介紹了下協(xié)議和OSI參考模型,并簡(jiǎn)單了解下網(wǎng)絡(luò)構(gòu)成要素,這回該說(shuō)說(shuō)TCP/IP了 互聯(lián)網(wǎng)與TCP/IP的...
    洛洛愛(ài)吃肉閱讀 1,699評(píng)論 0 7

友情鏈接更多精彩內(nèi)容