1、Firebase簡介java
Firebase是幫助谷歌開發的手機平臺。它能夠幫助開發開發者開發高質量手機應用和發展商務。android
2、開發和測試應用的功能web
2.1 實時數據庫shell
使用雲主機和NoSQL數據庫在用戶和設備之間存儲和同步數據。在鏈接的設備之間快速的同步和更新數據。設備不在線數據也會仍然有效,即便在沒有網絡的狀況下也能提供一個很好的用戶體驗。數據庫
2.1.1 介紹json
使用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 firebase-storage@system.gserviceaccount.com: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、發展和吸引用戶的功能
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。
做者:MobService連接:https://www.imooc.com/article/288414來源:慕課網