Firebase模塊的使用方法

一、Firebase簡介

Firebase是幫助谷歌開發的手機平臺。它可以幫助開發開發者開發高質量手機應用和發展商務。


二、開發和測試應用的功能

2.1 實時數據庫

使用雲主機和NoSQL數據庫在用戶和設備之間存儲和同步數據。在連接的設備之間快速的同步和更新數據。設備不在線數據也會仍然有效,即使在沒有網絡的情況下也能提供一個很好的用戶體驗。


2.1.1 介紹

使用NoSQL雲數據庫存儲和同步數據。數據可以在所有客戶端實時同步,當你的app下線的時候存儲的數據依然有效。


Firebase實時數據庫是基於雲存儲的數據庫。數據是以JSON的格式保存,並且可以在每個連接的客戶端之間共享。當你使用SDK編譯iOS,Android,JavaScript應用時,所有客戶端共享一份實時數據庫實例,並且在數據有更新的時候自動收到更新提示。


2.1.2 集成方法

把Firebase集成到應用

 


安裝Firebase SDK。

在Firebase控制檯把應用添加到對應的Firebase工程。

添加實時數據庫到應用

把Firebase實時數據庫依賴添加到你應用級別的build.gralde文件中。


 compile 'com.google.firebase:firebase-database:11.6.2'

配置firebase數據庫規則

實 時數據庫提供了一種可以生命的規則語言,使用這種語言你可以定義當你讀寫數據庫是的數據結構,數據索引方式。默認情況下,只有認證過的用戶纔可以讀寫數據 庫。開始時如果你不想開啓認證,可以在公開訪問中配置訪問規則。這樣會讓你的數據庫開放給任何一個人,甚至是不使用你應用的用戶,所以當你打算開啓認證時 要再開啓它。


寫數據庫

使用getInstance()獲取到你的數據庫實例,當你打算寫庫的時候使用它來引用你的寫入位置。


 // Write a message to the database

FirebaseDatabase database = FirebaseDatabase.getInstance();

DatabaseReference myRef = database.getReference("message");


myRef.setValue("Hello, World!");

你可以使用這種犯法保存各種數據類型的數據,包括Java對象。


讀數據庫

爲了讓你app的數據可以實時更新,你需要添加一個ValueEventListenr引用到你剛創建的引用。


當你的回調被注入,每次數據更新或者是它的子數據被更新,這個類中的onDataChange()方法都會被觸發一次。


 // Read from the database

myRef.addValueEventListener(new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        // This method is called once with the initial value and again

        // whenever data at this location is updated.

        String value = dataSnapshot.getValue(String.class);

        Log.d(TAG, "Value is: " + value);

    }


    @Override

    public void onCancelled(DatabaseError error) {

        // Failed to read value

        Log.w(TAG, "Failed to read value.", error.toException());

    }

});

配置ProGuard

當 你在你的應用中使用Firebase實時數據庫並且開啓ProGuard功能時, 你需要考慮混淆以後你的數據模型怎麼樣被序列化和反序列化。如果使用DataSnapshot.getValue(Class)或者 DatabaseReference.setValue(Object)去讀寫數據時,你需要在proguard-rules.pro文件中添加對應的規 則。


 # Add this global rule

-keepattributes Signature


# This rule will properly ProGuard all the model classes in

# the package com.yourcompany.models. Modify to fit the structure

# of your app.

-keepclassmembers class com.yourcompany.models.** {

  *;

}

2.2 Crashlytics

使 用Crashlytics,可以把雪崩一樣的crash轉換成可以管理的錯誤列表來大大減少解決錯誤的時間。清晰一點說,你可以通過觀察在 Crashlytics頁面的用戶影響來快速決定先處理哪個問題。實時報警可以讓你把注意力集中在穩定性上。Crashlytics是firebase的 主要crash報告分析工具。


2.2.1 介紹

簡單來說就是對Android和iOS平臺應用的可操作並且深入的強大的crash報告解決方案。


Firebase Crashlytics是一個輕量級的實施的crash報告系統,使用它可以幫助你追蹤,按照優先級排序並解決那些破壞你app穩定新的問題。Crashlytics可以通過智能的分組crash和高亮導致這些問題的環境,來保存你的問題解決次數。


2.3 Crash報告

使用詳細的bug和crash報告來分析你的手機應用問題。在firebase的crash dashboard裏面,你可以快速看到根據頻率和嚴重性來統計的問題。使用它你可以快速監控你的應用健康,並且可以跟蹤用戶流。即使不在電腦前,您也可以收到郵件通知。


2.3.1 介紹

Crash報告可以在你的app中產生詳細的錯誤的報告。問題可以基於類似的堆棧來進行分組,也可以根據對用戶的影響的嚴重性來進行分級。除了自動報告以外,你也可以在捕獲導致crash的時候上傳自定義的事件。


報告服務器端的錯誤,我們推薦使用Google Stackdriver Error Reporting,它可以支持Node.js,Python,Go,Java,PHP和Ruby的錯誤。


2.3.2 集成方法

集成Crash報告

安裝Firebase SDK。

在Firebase控制檯把應用添加到對應的Firebase工程。

把Firebase Crash報告依賴添加到你應用級別的build.gralde文件中。

compile 'com.google.firebase:firebase-crash:11.6.2'


產生第一個錯誤

當產生致命錯誤或者未捕獲的異常的時候Firebase的Crash報告會自動生效。儘管這樣,你可以在自己捕獲到異常並且想上報時自己產生報告並上傳。可以通過下面的步驟報告錯誤:


在MainActivity中添加對靜態report函數的調用:

FirebaseCrash.report(new Exception("My first Android non-fatal error"));

啓動應用。

在adb logcat 中或者AndroidStudio的日誌中確認Crash報告功能已經開啓了。

在Firebase控制檯的Crash報告項中找到錯誤。需要注意大約1-2分鐘以後錯誤纔會能顯示出來。

產生自定義日誌

在錯誤報告中或者logcat中,你可以使用Crash報告來發送自定義事件。如果你希望報告一個不被logcat輸出的事件,你只需要像下面一樣傳遞一個string作爲調用參數:


 FirebaseCrash.log("Activity created");

如果你想產生一個logcat的輸出,你需要提供log等級和tag。


反混淆ProGuard標籤

ProGuard產生一個mapping.txt文件,這個文件列出了混淆變量和原始變量名的對應關係。如果你開啓了ProGuard,上傳了mapping文件,你就可以在Crash報告頁面查看到反混淆的堆棧。


爲了測試,你可以在debug編譯類型中配置ProGuard,然後通過./gradlew assembleDebug命令開始編譯:


 debug {

   minifyEnabled true

   proguardFiles getDefaultProguardFile('proguard-android.txt'),

     'proguard-rules.pro'

}

使用Grade上傳ProGuard的映射文件

爲了在Firebase控制檯看到反混淆的堆棧,你可以使用一個Crash報告插件產生的Gradle task來吧ProGuard的映射文件到Firebase。


配置Crash報告插件的方法


1.在工程根目錄的build.gralde文件中添加Crash報告插件的規則:


     buildscript {

      repositories {

        jcenter()

        // ...

      }


      dependencies {

        // ...

        // For Android Studio 2.x, use firebase-plugins version 1.1.1

        classpath 'com.google.firebase:firebase-plugins:1.1.1'

        // For Android Studio 3.0, use firebase-plugins version 1.1.5

        //classpath 'com.google.firebase:firebase-plugins:1.1.5'

      }

    }

2.在應用工程的gradle文件中(通常是app/build.gradle)中,`ADD THIS`後面,添加下面的信息來開啓Crash報告插件:


     apply plugin: 'com.android.application'

    // ADD THIS

    apply plugin: 'com.google.firebase.firebase-crash'


    android {

      // ...

    }


    dependencies {

      // ...

    }

3.產生一個服務賬號和私鑰:


下載一個服務賬號的密鑰來認證你的上傳操作。在Firebase的控制檯,選擇你的工程然後點擊產生一個新的私鑰。


4.在文件目錄$HOME/.gradle/gradle.properties中添加一個FirebaseServiceAccountFilePath鍵的屬性值,或者通過命令行的-P參數指定另外一個路徑。爲了使用另外一個服務賬號文件,你可以晚點再更新你的FirebaseServiceAccountFilePath鍵。使用-P來指定目錄的方法如下:


 


 ./gradlew -PFirebaseServiceAccountFilePath=/usr/ServiceAccount/MyApp-a287fsd34.json :app:firebaseUploadReleaseProguardMapping

5.在項目目錄中,你可以通過運行一個gradlew命令來完成編譯APK和上傳mapping文件兩個操作。


 


 ./gradlew :app:firebaseUploadReleaseProguardMapping



2.4 Cloud Firestore

使用Cloud Firestore,你可以在全球的維度下,使用雲託管的NoSQL數據在用戶和設備之間存儲和同步數據。


2.4.1 介紹

你可以在客戶端和服務端開發的過程中使用我們的靈活的可擴展的NoSQL雲數據庫來存儲同步數據。


Cloud Firestore是一個靈活的可擴展的爲了手機,web和服務端開發的數據庫。他可以在客戶端app中間通過實時回調同步保存的數據,並且可以爲手機和 web提供線下支持,這樣你就可以在不需要在乎網絡延遲和網絡連接的情況下設計響應式應用。Cloud Firestore也提供了其他Firebase和谷歌雲平臺產品(包括Cloud Functions)的無縫集成。


2.4.2 集成方法

產生一個Cloud Firestore工程

打開Firebase控制檯,產生一個新工程。

在數據庫項中,點擊Try Firestore Beta。

點擊Enable。

當你產生一個Cloud Firestore工程時,在Cloud API Manager中也會開啓API。


初始化你的開發環境

按照添加Firebase到你的Android app中的步驟集成。

添加Cloud Firestore Android庫到你的app/build.gradle文件。

 compile 'com.google.firebase:firebase-firestore:11.4.2'

初始化Cloud Firestore

初始化Cloud Firestore實例:


 // Access a Cloud Firestore instance from your Activity


FirebaseFirestore db = FirebaseFirestore.getInstance();

添加數據

Cloud Store以Documets來保存數據,而Documents是以Collections的方式存儲的。當你第一次添加數據到document中的時 候,Cloud Firestore會自動幫你產生collectons和documents。你不需要自己手動創建。


可以使用一下代碼產生一個collection和document。


 // Create a new user with a first and last name

Map<String, Object> user = new HashMap<>();

user.put("first", "Ada");

user.put("last", "Lovelace");

user.put("born", 1815);


// Add a new document with a generated ID

db.collection("users")

        .add(user)

        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {

            @Override

            public void onSuccess(DocumentReference documentReference) {

                Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());

            }

        })

        .addOnFailureListener(new OnFailureListener() {

            @Override

            public void onFailure(@NonNull Exception e) {

                Log.w(TAG, "Error adding document", e);

            }

        });

現在可以添加另外一個document到users collection。注意,這個文件包含一個沒在第一個document中產生的鍵-值對(中間名字)。Documents可以包含不同組的信息。


 // Create a new user with a first, middle, and last name

Map<String, Object> user = new HashMap<>();

user.put("first", "Alan");

user.put("middle", "Mathison");

user.put("last", "Turring");

user.put("born", 1912);


// Add a new document with a generated ID

db.collection("users")

        .add(user)

        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {

            @Override

            public void onSuccess(DocumentReference documentReference) {

                Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());

            }

        })

        .addOnFailureListener(new OnFailureListener() {

            @Override

            public void onFailure(@NonNull Exception e) {

                Log.w(TAG, "Error adding document", e);

            }

        });

讀取數據

你可以使用Firebase控制檯的數據查看器來快速驗證你已經向Cloud Firestore添加了數據。

你也可以使用get方法來湖區整個collection。

 db.collection("users")

        .get()

        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {

            @Override

            public void onComplete(@NonNull Task<QuerySnapshot> task) {

                if (task.isSuccessful()) {

                    for (DocumentSnapshot document : task.getResult()) {

                        Log.d(TAG, document.getId() + " => " + document.getData());

                    }

                } else {

                    Log.w(TAG, "Error getting documents.", task.getException());

                }

            }

        });

保障數據安全

如果你使用Web,Android或者iOS SDK開發,使用Firebase 認證和Cloud Firestore安全規則來保證你Cloud Firestore的數據安全。

如果你是一個服務器端的SDK來開發,使用認證訪問管理(IAM)來保證你在Cloud Firestore中的數據安全。

2.5 身份認證

通 過簡單快捷的方式來管理用戶。firebase的身份認證功能提供了多種身份認證方式,包括郵箱密碼,還有像google,facebook這樣的第三方 供應商賬號登錄,你還可以直接使用已有的賬號系統來管理用戶賬號。你可以編寫實現完全自定製UI,也可以使用我們提供的開源代碼二次開發。


多數app需要知道用戶的身份信息,知道一個用戶的信息可以讓app安全的在雲數據中保存用戶數據,並且在用戶的所有設備中提供相同的自定義的體驗。


Firebase身份認證提供了後端服務,簡單易用的SDK並且已經設計好的UI庫來認證使用你的app的用戶。它支持使用密碼,手機號碼,流行的身份認證提供商例如Google,Facebook和Twitter等等進行認證。


Firebase的身份認證和其他Firebase服務進行了深度集成,並且平衡了例如OAuth 2.0和OpenID Connect這些工業標準,所以他也可以和你自定義的後端進行很簡單的集成。


2.6 雲業務功能

你可以使用自己的後端代碼來擴展app的功能,甚至不需要管理和擴展你自己的服務器。雲業務功能是基於事件觸發。你可以使用firebase產品、google雲服務器或者其他第三方產品,通過網絡請求來觸發。


2.6.1 介紹

Firebase的雲業務功能允許你自動運行後端代碼來響應Firebase功能和HTTPS請求觸發的事件。你的代碼存儲在Google的雲系統中,並且在一個管理好的環境中運行。你不需要管理和擴展你自己的服務器。


2.7 雲存儲

使用一種強大簡單和低成本google數據存儲系統來存儲和分享用戶產生的圖片,音視頻等數據。使用雲存儲功能的firebase sdk添加了google安全來保證你firebase應用的上傳下載功能,即使在較差的網絡情況下也能有好的體驗。


2.7.1 介紹

雲存儲是爲app開發者提供存儲和讀取用戶產生數據(例如圖片和視頻)功能的服務。


Firebase 的雲存儲是一個強大,簡單並且低開銷的運行在Google系統上的雲服務。雲存儲的Firebase SDK爲你的app上傳下載數據提供了Google安全認證,即使在不好的網絡情況下也可以使用。你可以使用我們的SDK來存儲圖像,音頻,視頻和其他用 戶產生的數據。在服務器端,你可以使用谷歌雲存儲來訪問相同的這些數據。


2.7.2 集成方法

預先操作

安裝Firebase SDK。

在Firebase控制檯中添加你的app到Firebase工程。

初始化公開訪問

雲存儲提供了一種可聲明規則的語言來讓你定義你如何讀寫你自己的數據的結構和他們的索引方式。默認情況下只有認證過的用戶才能讀寫存儲的數據。爲了開始不開啓認證,你可以公開訪問的規則。


這樣會讓你存儲的數據完全公開,當你打算開啓認證的時候記得再開其它。


添加雲存儲到app

在你的build.grale文件中添加雲存儲的依賴。


 compile 'com.google.firebase:firebase-storage:11.6.2'

初始化雲存儲

第一步是先產生一個FirebaseStorage的實例來訪問你的雲存儲功能。


 FirebaseStorage storage = FirebaseStorage.getInstance();

高級初始化

一些使用情況下需要進行高級初始化:


在多個地理位置區域中使用存儲

在不同的存儲類型中使用存儲

相同app中的不同認證用戶間使用存儲

第一種情況:當你的用戶遍佈世界,你想把數據存儲在離他們近的地方的時候,這種問題可以很好的解決。例如你可以產生一個產生一個在美國,歐洲和亞洲的存儲來保存用戶數據來降低訪問延遲。


第二種情況:如果你有不同訪問類型的數據。例如:你可以創建多個區或者一個區的存儲來存儲圖片或者其他經常訪問的數據,以及一個專門用來存儲的區域來存儲用戶的備份和其他不經常訪問的數據。


其他情況下你可以參考使用多種存儲方式。 


當你在編譯一個應用的時候第三種情況會比較常見。就像Google Drive一樣,你可以讓用戶有多個登錄的賬戶(例如一個個人賬戶和一個工作賬戶)。你可以使用自定義Firebase app實例來認證每一個增加的賬號。


使用多存儲

如果你想使用一種和上面說的情況都不一樣的存儲方式,或者在一個app中使用多個存儲,你可以使用FirebaseStorage的實例產生一個你自定義存儲的引用:


 // Get a non-default Storage bucket

FirebaseStorage storage = FirebaseStorage.getInstance("gs://my-custom-bucket");

導入存儲

當你導入一個存在的雲存儲數據到Firebase中時,你需要按照Google Cloud SDK中規定的使用gsutil工具的方式授權Firebase訪問權限:


 gsutil -m acl ch -r -u [email protected]:O gs://<your-cloud-storage-bucket>

這不影響已經產生的數據存儲,他們有對Firebase的默認訪問權限。這是一種臨時方法,未來將會變爲自動化。


使用一個自定義Firebase應用


當你使用自定義的FirebaseApp編譯了一個更復雜的app,你可以產生一個那個app初始化的FirebaseStorage實例。


 // Get the default bucket from a custom FirebaseApp

FirebaseStorage storage = FirebaseStorage.getInstance(customApp);


// Get a non-default bucket from a custom FirebaseApp

FirebaseStorage storage = FirebaseStorage.getInstance(customApp, "gs://my-custom-bucket");

2.8 網頁託管

使用專門爲網頁應用開發的工具來簡化你的網頁託管。當你上傳網頁資源文件的時候,我們會自動的把他們推給我們的全球CDN,併產生一個免費的SSL證書,這樣不管你的用戶在哪兒都可以得到一個安全、可靠、低延遲的用戶體驗。


2.8.1 介紹

Firebase的網頁託管,爲你的web app提供了一個快速並且安全的靜態託管服務。


Firebase的網頁託管是爲開發者打造的一款產品級別的web內容託管。使用網頁託管,你可以快速並且簡單的使用一個命令來部署web應用和靜態內容到全球CDN。


2.9 android測試實驗室

在模擬器或者真實設備上運行自動的或者自定義的app測試用例。在你的開發生命週期裏面使用firebase的android測試功能,你可以發現bug和缺陷,這樣你就可以在大範圍的設備上提供一個良好的用戶體驗。


2.9.1 介紹

在託管在谷歌數據中心的設備上測試你的app。


Android 的Firebase測試實驗室爲Android app測試提供了基於雲架構的測試。通過一次操作,你可以在多種配置的多種設備上初始化測試。包括日誌,視頻和截圖的測試結果都可以在Firebase控 制臺上查看。就算你沒有給你的app寫任何的測試代碼,測試實驗室也可以自動運行你的app,尋找crash。


2.10 性能監控

在你的用戶設備上分析app產生的性能問題。使用traces來監控你的app的某個模塊的性能問題,你可以在firebase的控制檯裏面看到一個彙總的圖表。不用寫任何代碼來你就可以監控應用的啓動時間和HTTP請求。


2.10.1 介紹

可以深入洞察你app的性能問題。


Firebase 的性能監控是一個可以幫助你深入監控你的iOS和Android app的性能特性的服務。你可以使用性能監控SDK來從你的app中收集性能數據,然後在Firebase控制檯來查閱分析這些數據。性能監控可以幫你理 解你的app在什麼時候什麼地方可以進行性能提升,這樣你就可以根據這些信息來解決性能的問題。


性能監控現在是beta release版本。


2.10.2 集成方法

運行環境要求

在開始前,你需要做一些事情來搭建你的運行環境:


一個運行Android 4.0(Ice Create Sandwich)的android設備,並且安裝了Google Play Service 11.8.0及以上。


在AndroidSDK Manager中,從Google 倉庫選項裏面安裝Google Play 服務


最新的的Android Studio,2.2及以上。


把Firebase添加到Android 工程

如果你使用了Firebase的其他功能,你可以使用Android Studio的Firebase Assistant功能把他們添加到你的app中。


在Android Studio中打開Firebase Assistant:


1.在Tools > Firebase中打開Assistant窗口。


2.點擊來打開功能列表中的任意一個(例如,Analytics),然後點擊提示的瀏覽鏈接(例如,Log和Analytics事件。


3.點擊連接到Firebase按鈕來連接到Firebase並且把需要的代碼添加到你的app。


把性能監控添加到你的app

1.打開工程級別的build.gradle文件,然後添加下面的:


a.在buildscript -> repositories段裏面:


jcenter()


b.在buildscript -> dependencies段裏面,添加Firebase的依賴:


Android Studio 2.x:


 classpath 'com.google.firebase:firebase-plugins:1.1.1'

Android Studio 3.x:


 classpath 'com.google.firebase:firebase-plugins:1.1.5'

2.打開應用級別的build.gradle文件,然後添加下面的:


a.在apply plugin: 'com.android.application' 下面添加:


 apply plugin: 'com.google.firebase.firebase-perf'

b.在dependencies段裏面添加:


 compile 'com.google.firebase:firebase-perf:11.8.0'

c.如果你的app使用了其他的Firebase SDK,你需要爲了那些SDK把版本調整爲11.8.0


3.重新編譯你的應用,自動追蹤的操作和HTTP/S網絡請求現在都已經被監控了。


4.在你的app中定義一個追蹤和一個或多個計數器(可選)


自定義追蹤是一種彙報你app代碼性能數據的方法。想了解更多自定義自定義追蹤,點擊性能監控概述。在app中你可以有多個自定義追蹤,並且多個追蹤可以同時運行。在你的app中,每個自定義追蹤都有一個或多個計數器來統計你的性能相關的事件,這些計數器和產生他們的自定義追蹤關聯。


a.在你的頂層java文件中添加這些性能監控相關的類:


 import com.google.firebase.perf.FirebasePerformance;

import com.google.firebase.perf.metrics.Trace;

b.在你app中想啓動監控的代碼前面添加下面的代碼來啓動一個叫做test_trace的追蹤:


 Trace myTrace = FirebasePerformance.getInstance().newTrace("test_trace");

myTrace.start();

c.添加下面的類似代碼來統計每次事件的產生。item_cache_hit和item_cache_miss是保留的關鍵字,你可以使用其他的名字來統計其他類型的事件:

 Item item = cache.fetch("item");

if (item != null) {

    myTrace.incrementCounter("item_cache_hit");

} else {

    myTrace.incrementCounter("item_cache_miss");

}

d.在你想停止追蹤的地方以後添加下面的代碼:

 myTrace.stop();

5.添加@AddTrace 註釋來追蹤特定的方法(可選)


在你的app中你可以通過添加一個@AddTrace註釋並且添加一個string來命名一個追蹤結果。這樣這個追蹤會在方法開始時啓動統計,方法結束時結束統計。通過這種方法沒有計數器。


 import com.google.firebase.perf.metrics.AddTrace;

...

@Override

@AddTrace(name = "onCreateTrace", enabled = true/*Optional*/)

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        ...

        ...

}

6.在Android vitals中使用性能監控


使用性能監控,你可以在Play Deveoper控制檯的Android vitals dashboard中得到深入的性能分析。在Android vitals dashboard中,當你不知道你的app的哪裏影響了性能的時候,性能監控會尤其有用。


例如,當Android vitals dashboard標註出你的app在產生一個幀和在屏幕顯示的時候使用的時間超出了預期,你可以使用性能監控來分析你的app的那個地方導致了低效渲染。你可以使用下面的方法來給低速幀進行計數:


1.當用戶開始和Activity進行交互的時候,通過調用myTrace.start()來啓動一個自定義的追蹤。


2.調用FrameMetricsAggregator()來產生一個可以捕獲每幀TOTAL_DURATION參數的對象。


3.通過調用myTrace.stop()來停止一個自定義統計:


a.調用FrameMetricsAggregator.stop()方法來從FrameMetricsAggregator對象中得到TOTAL_DURATION的值。


b.增加frames變量來得到所有幀的數量。當每個TOTAL_DURATION值大於16ms時給slow_frames變量加一,當大於700ms時給frozen_frames計數加一(或者當沒有低效渲染產生的時候把計數設置爲0)。


點擊低效渲染,可以在Android vitals的dashboard中瞭解更多關於檢測低效渲染的問題。


7.在Firebase控制檯檢查更多關於性能檢測的結果


1.在Android Studio中編譯app。


2.使用一個有Google Play Service11.8.0以上版本的最新鏡像的android模擬器或者設備來測試你的app。


3.結果會在測試後的12小時以內產生,你可在Firebase的控制檯查看產生的數據。


8.發佈你的app,在Firebase的控制檯查看結果


當你使用一個或者多個測試設備已經確認產生了有效的性能監控結果以後,你可以給用戶發佈已經更新了版本的app,然後使用Firebase控制檯來監控性能數據。


三、發展和吸引用戶的功能

3.1 統計

在一個單一dashboard裏面分析用戶的屬性和行爲來在你產品的roadmap裏面做好及時正確的判斷。你可以通過firebase提供的報告獲取深刻準確的信息,或者把你的原始事件數據導出到Google BigQuery來進行自定義分析。


3.1.1 介紹

FIrebase的統計功能是可以提供深入的app使用和用戶參與度測量的免費解決方案。


Firebase 的核心是Google的Firebase統計功能,它不僅免費並且沒有任何限制。Firebase的其他功能都深度集成了統計,總共不僅有高達500個清 晰的事件統計,還能允許你在Firebase SDK中自定義事件。統計的報告能給你提供清晰的用戶的行爲分析,這樣你就可以依據這些數據在市場和性能優化兩個方面做出清晰準確的判斷。


3.1.2 集成方法

統計可以給你的app提供用戶使用和行爲數據的收集。SDK主要輸出下面兩種類型的信息:


事件:也就是你app正在產生的包括用戶操作,系統事件或錯誤相關的信息。


用戶屬性:你定義的用來描述你的用戶羣的屬性,比如語言設置或者地理位置。


你不需要添加任何代碼,統計功能就會自動收集一些事件和用戶屬性數據。


運行環境要求

1.安裝Firebase SDK。


2.在Firebase控制檯把你的app添加到工程裏面。


3.使用Android Studio 1.5或以上。


把統計添加到你的app

在你app等級的build.gradle文件中添加統計的依賴


 compile 'com.google.firebase:firebase-core:11.8.0'

在你activity的最前面聲明com.google.firebase.analytics.FirebaseAnalytics對象 


 private FirebaseAnalytics mFirebaseAnalytics;

然後在onCreate()函數裏面初始化它


 // Obtain the FirebaseAnalytics instance.

mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

一 旦你產生了FirebaseAnalytics實例,你可以使用logEvent()函數打印預定義好的或者自定義的事件。你可以在 FirebaseAnalytics.Event和FirebaseAnalytics.Param的參考文檔裏面查看預先定義好的事件和變量。


下面的例子展示了當一個用戶點擊你app裏面的某一個元素的時候的打印SELECT_CONTENT事件的方法: 


 Bundle bundle = new Bundle();

bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id);

bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name);

bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image");

mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);

確認事件

打開verbose 日誌輸出就可以確認事件是不是被正常記錄,自動的手動的事件都可以這樣查看。


你可以使用下面的一系列命令來開啓verbose日誌: 


 adb shell setprop log.tag.FA VERBOSE

adb shell setprop log.tag.FA-SVC VERBOSE

adb logcat -v time -s FA FA-SVC

3.2 雲消息(FCM)

免費發送消息或者通知到你的Android,iOS和網頁用戶。雲消息可以發送給單一的設備,組設備,或者特定的主題和用戶劃分。Firebase Cloud Messaging(FCM)有強大的事件負載能力,可以每天發送數億條消息。


3.2.1 介紹

FCM是一個可以讓你免費發送可靠消息的跨平臺消息解決方案。


使用FCM,你可以在有新郵件或者其他數據需要同步的時候通知一個客戶端app。你可以通過發送推送來讓用戶重新使用你的app和提高用戶留存。當使用即時消息的時候,一個消息可以發送高達4K的數據到客戶端app。


3.2.2 集成方法

集成Firebase和FCM SDK

1.如果你還沒有集成,那麼參考在你的Android工程中集成Firebase。


2.在Android Studio中,在你的應用級別的build.gradle文件中添加FCM依賴:


 dependencies {

     compile 'com.google.firebase:firebase-messaging:11.8.0'

}

編輯你的app manifest

按照下面的步驟添加相關信息到你的app的manifest。


一個繼承自FirebaseMessagingService的類。這樣可以讓你在後臺增加一些當收到推送時的消息處理邏輯。爲了在前臺app中收到推送,收到負載數據,發送上傳消息等等,你也需要繼承這個服務。


 <service

    android:name=".MyFirebaseMessagingService">

    <intent-filter>

        <action android:name="com.google.firebase.MESSAGING_EVENT"/>

    </intent-filter>

</service>

一個繼承自FirebaseInstanceIdService的類來處理產生,更新註冊的token。爲了給特定設備發送消息和產生設備組也需要你繼承這個服務。


 <service

    android:name=".MyFirebaseInstanceIDService">

    <intent-filter>

        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>

    </intent-filter>

</service>

如果FCM是你app的關鍵功能,爸miniSdkVersion設置成8或以上。這樣可以避免你的app安裝在有可能運行不好的系統裏面。


3.3 預測

Firebase的預測功能使用機器學來分析你的數據,來產生基於用戶行爲的動態用戶組。這些用戶組可以在其他的功能中使用,例如雲消息,遠端配置等等。


3.3.1 介紹

Firebase的預測功能是使用機器學習分析你的數據來基於用戶行爲預測來動態產生用戶組。當使用Firebase遠程配置,通知編輯器和A/B測試的時候,預測功能會自動有效。


當你在遠程配置裏面使用預測的時候,你可以通過提供一個基於每一個用戶預測行爲的自定義體驗。


當使用A/B測試的時候,你可以計算你基於預測策略的有效性。


3.4 動態跳轉

使用動態跳轉可以爲iOS,Android和Web網頁提供一個自定義的用戶體驗。你可以使用它增強Web頁面來提供app的交互、用戶到用戶的分享、社會活動或市場活動等等。動態跳轉給你提供了可以更好的理解手機應用增長的參數。


3.4.1 介紹

動態跳轉可以讓你在多個平臺,甚至在沒有安裝app的時候讓跳轉可以按照你想要的方式進行。


使 用動態跳轉,你的用戶可以在打開你的鏈接的時候在對應的平臺上得到最好的有效體現。當你的用戶在iOS或者Android系統上打開一個動態跳轉的時候, 對應的本地應用的鏈接的內容可以直接被打開。如果用戶在桌面瀏覽器上打開相同的動態跳轉,網站上等同功能的頁面會被打開。


另外,即使用戶沒有安裝你的app,動態跳轉也可以正常工作:如果用戶在沒有安裝你的app的iOS或者Android系統上打開一個動態跳轉的時候,他們會收到安裝app的提示。在安裝好以後你的應用會啓動,然後訪問對應的頁面。


3.5 遠程配置

自定義你的app如何提供給你的每個用戶。修改視覺效果、逐漸推出新的特性、運行A/B測試、交付自定義的內容給特定用戶、在不發佈一個新版本的情況下提供更新,這些都可以通過Firebase控制檯來操作。通過它,你可以監控改動的影響並且可以在幾分鐘之內做出響應。


3.5.1 介紹

在不發佈一個app更新的情況下就可以更改你的app的行爲和表現。


當使用遠程配置的時候,你可以產生一個應用內的默認值來控制你應用的行爲和表現。後面你可以通過Firebase控制檯來修改你所有用戶或者部分用戶的配置。當你的配置更新了以後,你的app檢查到有配置更新就可以快速獲取並且應用配置,只會有很小的性能影響。


2.5.2 集成方法

在app中添加Firebase

安裝Firebase SDK,確認在你的app層級的build.gradle文件中已經添加了遠程配置相關的依賴:


 compile 'com.google.firebase:firebase-config:11.8.0'

獲取遠程配置的單例對象

參照Remote Config quickstart例子app,你可以使用FirebaseRemoteConfig.getInstance()方法獲取單例遠程配置對象。


設置app中的默認變量的值

你需要在遠程配置對象中設置一個app內的默認變量的值。這樣你的app在從遠程配置服務獲取數據之前可以按照預期展示:


1.使用Map對象或者XML資源文件來定義一組變量名和對應的默認值。Remote Config quickstart是使用XML文件來定義變量名和對應的默認值的。


2.參照Remote Config quickstart例子app,通過調用setDefault()函數來吧這些值設置到遠程配置對象裏面。


在你的app裏面得到變量的值


現 在通過遠程配置的對象你就可以獲取變量的值了。如果你在遠程配置服務裏面設置了數值,你可以獲取到他們並且使用他們,這些數值對你的app有效。你也可以 得到通過調用setDefault()函數配置的變量的值。直接把變量的名稱作爲參數傳遞給下面列出來的映射到數據類型的方法:


getBoolean()

getByteArray()

getDouble()

getLong()

getString()

3.6 邀請

讓用戶通過可推薦的代碼、喜歡的內容、使用郵件或者短信,可以全面的分享你的app。這種完整的解決方案可以和Firebase的谷歌分析協同工作,這樣你就可以知道什麼時候用戶通過邀請打開或者安裝了你的app。


3.6.1 介紹

邀請是通過email或者短信進行引用和分享的app開箱即用的解決方案。你可以使用Firebase動態跳轉來自定義邀請的用戶體驗或者使用代碼來產生鏈接。


口碑是讓你的用戶安裝你的app的最有效的方式。在最近的對上千的智能手機的用戶調查的時候發現,讓用戶發現一個app的排名第一的原因是他們從朋友或者同事那裏聽說過。Firebase的邀請功能會讓你app用戶轉化成你app粉絲變得簡單。


邀請功能是基於Firebase動態跳轉開發的,這樣會讓用戶在他們的平臺上以及安裝的應用裏面獲得可能的最好的用戶體驗。


3.6.2 集成方法

環境配置

1.在你的Firebase控制檯裏面把你的app連接到Firebase工程。


2.如果你沒有開啓Firebase動態跳轉的功能的話你需要在Firebase控制檯裏面開啓它,因爲邀請是基於動態跳轉開發的。


3.在你的Android工程裏面添加Firebase依賴。


4.在你app級別的build.gradle裏面添加邀請的依賴:


 compile 'com.google.firebase:firebase-invites:11.8.0'

發送邀請

使用AppInvitation.IntentBuilder類來發送一個產生好的Intent:


 private void onInviteClicked() {

    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))

            .setMessage(getString(R.string.invitation_message))

            .setDeepLink(Uri.parse(getString(R.string.invitation_deep_link)))

            .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))

            .setCallToActionText(getString(R.string.invitation_cta))

            .build();

    startActivityForResult(intent, REQUEST_INVITE);

}

接受邀請

當 一個還沒有安裝你app的一用戶收到邀請的時候,他們可以在Google Play Store裏面選擇安裝對應的app。當已經安裝好以後就可以正常接受你發送的的指向對應內容的URL了。你可以通過調用getDynamicLink方 法來接收對應你app內容的URL:


 @Override

protected void onCreate(Bundle savedInstanceState) {

    // ...


    // Check for App Invite invitations and launch deep-link activity if possible.

    // Requires that an Activity is registered in AndroidManifest.xml to handle

    // deep-link URLs.

    FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent())

            .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {

                @Override

                public void onSuccess(PendingDynamicLinkData data) {

                    if (data == null) {

                        Log.d(TAG, "getInvitation: no data");

                        return;

                    }


                    // Get the deep link

                    Uri deepLink = data.getLink();


                    // Extract invite

                    FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(data);

                    if (invite != null) {

                        String invitationId = invite.getInvitationId();

                    }


                    // Handle the deep link

                    // ...

                }

            })

            .addOnFailureListener(this, new OnFailureListener() {

                @Override

                public void onFailure(@NonNull Exception e) {

                    Log.w(TAG, "getDynamicLink:onFailure", e);

                }

            });

}

必須在每一個可能被連接啓動的activity中調用getDynamicLink()方法,就算是使用getIntent().getData()獲取到的intent的鏈接。通過調用getDynamicLink()獲取到鏈接和邀請ID以後

記得要清除掉對應的數據,這樣可以保證這些數據只會被你的app處理一次。

一般情況下是在MainActivity裏面和可能匹配到鏈接的intent filter對應的activity裏面調用getDynamicLink()。


3.7 應用索引

使用谷歌搜索集成來重新吸引已經安裝了你的app的用戶。如果用戶安裝了你的app並且搜索了相關的內容,他們可以在搜索結果裏面直接啓動你的應用。如果用戶還沒有安裝,當他們搜索類似app的時候會彈出一個安裝應用的卡片。


3.7.1 介紹

Firebase 的應用索引可以讓你的app加入到Google搜索裏面。如果用戶安裝了你的app,他們可以直接啓動你的app並且直接跳轉到他們搜索的內容。應用索引 甚至可以通過在設備讓搜索公開和私人的內容來幫你重新吸引用戶,甚至還會自動完成查詢內容來幫助他們更快的找到需要的東西。


3.7.1 集成方式

添加Firebase和應用索引庫

雖然你可能不完全需要用Firebase來讓你app的公開內容都能被Google檢索到,應用檢索API可以給你的app增加除了被搜索到外的更多功能。


1.在你的android工程裏面添加Firebase


2.通過在build.gradle文件裏面添加下面的代碼來把應用索引庫添加到你的工程:


 dependencies {

  ...

  // To avoid errors, use the same Firebase SDK version across your app.

  compile 'com.google.firebase:firebase-appindexing:11.8.0'

  ...

}

結構化鏈接你的app內容

結構化的鏈接你的網頁和app,這樣URL對應的網站頁面可以對應到你Android app的頁面。Google 搜索會抓取你網站上的這些鏈接的數據,然後把用戶直接導入到你的app。


把android app鏈接添加到你的app


無論是公開的Google搜索結果的內容還是設備上的本地google搜索都可以通過Android App鏈接來處理到你app的鏈接。Android app鏈接可以確保用戶打開到你app的鏈接的時候能轉入到你配置好的界面。通過Android Instant Apps,用戶即使沒有安裝你的app也可以運行你的app。


Android app鏈接主要包含下面兩個組件:


1.深入鏈接到你app的內容:在你的manifest文件裏面添加intent filter來定義HTTP URL的映射關係。然後配置你的app使用intent的數據來把用戶導向正確的內容。瞭解更多點擊在app內容中產生深度鏈接。


2.連接認證:配置你的app去請求連接認證,對人對你站點和app的權限。然後發佈一個數據資源連接文件來認證你的權限。瞭解更多點擊認證app鏈接。


Android Studio的App鏈接助理可以幫你按照步驟執行Android app鏈接文檔裏面的步驟。瞭解更多點擊使用app鏈接助理。


3.8 AdMob

通過向全球用戶展示吸引人的廣告來賺錢。AdMob有你所需要的全部來實現你的第一類變現策略、最大化你的收入。AdMob可以根據你的app來裁剪,並且它的API可以讓你很輕鬆的集成豐富的廣告格式。


3.8.1 介紹

通過精準的在app內的廣告,Google的AdMob是一種可以來讓你的app變現的簡單方法。


Google的AdMob是可以讓你的app產生利潤的手機廣告平臺。使用AdMob的同時使用統計功能可以給你更多的app使用率和統計的能力。集成了AdMob功能的Firebase不會對你現有AdMob配置產生影響。


3.8.2 集成方式

配置環境

1.安裝firebase SDK。


2.註冊AdMob賬號並且註冊一個app。


3.在Firebase工程裏面鏈接到app。


引入手機ads SDK


在你的build.gradle文件裏面添加依賴:


 compile 'com.google.firebase:firebase-ads:11.8.0'

初始化SDK

在你加載廣告之前,你需要傳入AdMob的appID來調用MobileAds.initialize()來初始化手機廣告SDK。這個只需要操作一次,一般情況下是在app啓動的時候。你可以在AdMob的用戶接口裏面找到你app的ID。


下面是如何在activity裏面調用initialize()函數的例子:


 package ...

import ...

import com.google.android.gms.ads.MobileAds;


public class MainActivity extends AppCompatActivity {

    ...

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713

        MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");

    }

    ...

}

選擇一種廣告格式

廣告SDK現在就已經被集成並且初始化好了,下面就需要開始實現一個廣告了。AdMob提供了大量的廣告格式,你可以選擇最匹配你app用戶體驗的一種方式來展示。


Banner


Banner是一個有矩形圖片和文字的在app的佈局裏面佔一塊地方的廣告形式。當用戶和app交互的時候它佔據屏幕的一塊地方,在一段時間以後會自動刷新。如果你剛開始使用手機廣告,可以從這中廣告形式開始。


Interstitial


Interstitial是一種直到被用戶關閉,一直覆蓋app界面的廣告形式。在app運行流程中出現的暫停的情況下這種廣告方式最試用,比如是在遊戲角色升級或者完成了一個任務。


Native


Native是一種基於元素組件的廣告形式,你可以在app中自由的定製資源文件的展示和操作的響應。通過自己選擇字體,顏色和其他細節,你可以產生自然的,不唐突的可以添加更豐富用戶體驗的廣告展現形式。


AdMob 提供了兩種不同的方式來實現native廣告:Native Ads Express和Native Ads Advanced。Native Ads Express是按照用戶儘可能簡單使用的方式來設計的,如果你剛開始接觸Native廣告那麼這是一種很好的選擇。Native Ads Advanced是按照用戶在展示ads時有最大自由度的原則來設計的。現在它只在一些發行商中進行接近beta的測試。


Rewarded Video


Rewarded Video是全屏視頻廣告,用戶可以選擇全部觀看來獲取app內的獎勵。


3.9 Google AdWords

通過谷歌業務涉及到的範圍來獲取和保留用戶。通過使用Firebase的谷歌分析你可以在搜索,顯示,視頻甚至某個用戶特定的區域來顯示廣告。提高你廣告的針對性和優化你的活動的表現。


3.9.1 介紹

通過線上廣告來獲取潛在用戶


安 裝驅動,通過對廣告交互的深入分析,通過谷歌分析來展示有針對性的活動來讓Firebase的使用者擴大你的用戶基數。當你使用了Firebase和 AdWords,你就使用了一種可以幫你看到AdWords投入驅動的app安裝和app內操作的的強大工具。使用Firebase和AdWords,你 可以向AdWords導入用戶列表並且從統計裏面把事件導入到AdWords。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章