3.78M
Категория: ПрограммированиеПрограммирование

Платформа Google Firebase

1.

Firebase

2.

Firebase
Firebase – это платформа Google, помогающая быстро
разрабатывать качественные мобильные и веб-приложения,
привлекать новых пользователей и повышать доходы. Ее
интегрированные инструменты, такие как сервер для мобильных
приложений, средства аналитики, инструменты для продвижения
приложений и монетизации, можно использовать по отдельности
или в любых сочетаниях.

3.

4.

5.

6.

7.

8.

Для каких приложений подходит Firebase?
iOS и Android являются основными целевыми
пакетами Firebase SDK, и расширяется поддержка
web, Flutter, Unity и C++. Вы также должны знать, что
существует Admin SDK, доступный для различных
языков, который можно использовать с любыми
серверными компонентами, которые вам могут
потребоваться.

9.

Группа продуктов “build”
• Authentication - авторизация и идентификация пользователей
• Realtime Database - база данных NoSQL в режиме реального
времени, размещаемая в облаке
• Cloud Firestore - база данных NoSQL в реальном времени,
размещаемая в облаке
• Cloud Storage - массивно масштабируемое файловое хранилище
• Cloud Functions - «бессерверный», управляемый событиями бэкэнд
• Firebase Hosting - глобальный веб-хостинг
• ML Kit - SDK для решения распространенных задач ML

10.

Firebase Authentication
Firebase Authentication предоставляет бэкэндсервисы, простые в использовании SDK и готовые
библиотеки пользовательского интерфейса для
аутентификации пользователей в вашем
приложении.

11.

Cloud Firestore
Cloud Firestore - это гибкая, масштабируемая база
данных для мобильной, веб- и серверной разработки от
Firebase и Google Cloud. Как и Firebase Realtime Database,
она обеспечивает синхронизацию данных в клиентских
приложениях с помощью слушателей реального
времени и предлагает поддержку офлайн для
мобильных и веб-приложений, что позволяет создавать
отзывчивые приложения, работающие независимо от
задержек в сети или подключения к Интернету.

12.

13.

Firebase Realtime Database
База данных Firebase Realtime Database это база данных, размещенная в облаке.
Данные хранятся в формате JSON и
синхронизируются в реальном времени с
каждым подключенным клиентом.

14.

Cloud Storage for Firebase
Cloud Storage для Firebase - это мощный,
простой и экономичный сервис хранения
объектов, созданный для масштабирования
Google. SDK Firebase для Cloud Storage
обеспечивают безопасность Google при
загрузке и скачивании файлов для ваших
приложений Firebase независимо от качества
сети.

15.

Firestore, Realtime db, Storage and Auth
Гарантируется, что клиенты смогут получить
доступ к этим данным только теми способами,
которые вы разрешите. Пользователи, вошедшие в
приложение с аутентификацией, автоматически
предоставляют идентификационный токен, который
вы можете использовать в своих правилах для
защиты того, кто может читать и записывать те или
иные элементы данных.

16.

Cloud Functions
Cloud Functions для Firebase - это бессерверный
фреймворк, позволяющий автоматически запускать
код бэкенда в ответ на события, вызванные фоновыми
событиями, HTTPS-запросами, Admin SDK или
заданиями Cloud Scheduler. Ваш код на JavaScript,
TypeScript или Python хранится в инфраструктуре
Google Cloud и выполняется в управляемой среде. Нет
необходимости управлять и масштабировать
собственные серверы.

17.

Firebase Hosting
Firebase Hosting - это хостинг веб-контента производственного
уровня для разработчиков. С помощью одной команды вы
можете быстро развернуть веб-приложения в глобальной сети
CDN (сети доставки контента). Хотя Firebase Hosting
оптимизирован для статических и одностраничных вебприложений, вы также можете использовать Firebase Hosting в
паре с Cloud Functions или Cloud Run для создания и
размещения динамического контента и микросервисов на
Firebase.

18.

Firebase Machine Learning
Firebase Machine Learning - это мобильный SDK,
который предоставляет опыт Google в области машинного
обучения для приложений Android и Apple в мощном и
простом в использовании пакете. Независимо от того,
являетесь ли вы новичком или опытным специалистом в
области машинного обучения, вы сможете реализовать
необходимую вам функциональность всего в нескольких
строках кода.

19.

Analytics - понимание пользователей и того, как они используют ваше
приложение.
Cloud Messaging - отправка сообщений и уведомлений пользователям
Remote Config - настройка приложения без развертывания новой версии;
мониторинг изменений
A/B-тестирование - проводите маркетинговые и юзабилити-эксперименты,
чтобы понять, что работает лучше.
Dynamic Links - конверсия в нативные приложения, совместное использование
пользователями и маркетинговые кампании.
In-App Messaging - привлечение активных пользователей с помощью целевых
сообщений
Crashlytics - Получите четкое и действенное представление о проблемах
приложений
Google AdMob - это простой способ монетизации мобильных приложений с
помощью таргетированной рекламы в приложении.

20.

Google Analytics
Google Analytics - это бесплатное решение для измерения
приложений, которое позволяет получить информацию об
использовании приложений и вовлеченности пользователей.
В основе Firebase лежит Google Analytics - неограниченное решение для
аналитики, доступное бесплатно. Analytics интегрируется с функциями
Firebase и предоставляет вам неограниченную отчетность по 500
отдельным событиям, которые вы можете определить с помощью
Firebase SDK. Отчеты Analytics помогут вам понять, как ведут себя ваши
пользователи, что позволит вам принимать обоснованные решения
относительно маркетинга приложений и оптимизации
производительности.

21.

Firebase Cloud Messaging
Firebase Cloud Messaging (FCM) - это кроссплатформенное решение
для обмена сообщениями, позволяющее надежно отправлять
сообщения без каких-либо затрат.
Используя FCM, вы можете уведомить клиентское приложение о
том, что новая электронная почта или другие данные доступны для
синхронизации. Вы можете отправлять уведомления, чтобы
стимулировать повторное привлечение и удержание
пользователей. В таких случаях, как обмен мгновенными
сообщениями, сообщение может передавать клиентскому
приложению полезную нагрузку размером до 4096 байт.

22.

Firebase Remote Config
Firebase Remote Config - это облачный сервис, позволяющий изменять
поведение и внешний вид вашего клиентского приложения или сервера,
не требуя от пользователей загрузки обновления приложения. При
использовании Remote Config вы создаете в приложении значения по
умолчанию, которые управляют поведением и внешним видом вашего
приложения. Затем вы можете использовать консоль Firebase или APIинтерфейсы бэкенда Remote Config, чтобы отменить значения по
умолчанию для всех потребителей API Remote Config или для сегментов
вашей пользовательской базы. Ваше приложение или серверная
реализация контролирует время применения обновлений и может часто
проверять наличие обновлений и применять их с незначительным
влиянием на производительность.

23.

Firebase A/B Testing
Firebase A/B Testing помогает оптимизировать работу приложения,
упрощая проведение, анализ и масштабирование продуктовых и
маркетинговых экспериментов. С его помощью вы можете
протестировать изменения пользовательского интерфейса,
функций или кампаний по привлечению пользователей, чтобы
увидеть, как они влияют на ключевые показатели (например, доход
и удержание), прежде чем широко внедрять их.
A/B Testing работает с FCM, позволяя тестировать различные
маркетинговые сообщения, и с Remote Config, позволяя
тестировать изменения внутри приложения.

24.

How does it work A/B testing

25.

Firebase Dynamic Links
Динамические ссылки Firebase - это ссылки, которые работают так,
как вы хотите, на разных платформах и независимо от того,
установлено ли уже ваше приложение.
Благодаря динамическим ссылкам ваши пользователи получают
наилучший опыт для платформы, на которой они открывают
ссылку. Если пользователь открывает динамическую ссылку на iOS
или Android, он может перейти непосредственно к содержимому
ссылки в вашем родном приложении. Если пользователь открывает
ту же динамическую ссылку в настольном браузере, он может
перейти к аналогичному контенту на вашем сайте.

26.

Firebase In-App Messaging
Firebase In-App Messaging поможет вам привлечь активных
пользователей вашего приложения, отправляя им целевые,
контекстные сообщения, побуждающие их использовать ключевые
функции приложения.

27.

Firebase Crashlytics
Firebase Crashlytics - это легкий отчет о сбоях в реальном
времени, который поможет вам отслеживать, определять
приоритеты и устранять проблемы со стабильностью,
снижающие качество приложения. Crashlytics экономит
время на устранение неполадок, грамотно группируя сбои
и выделяя обстоятельства, которые привели к их
возникновению.

28.

Google AdMob
Google AdMob - это мобильная рекламная
платформа, которую вы можете использовать для
получения прибыли от своего приложения.
Использование Firebase с AdMob дает вам
дополнительные данные об использовании
приложения и возможности аналитики.

29.

How does it work? Google AdMob
Google AdMob помогает монетизировать мобильное приложение с
помощью рекламы в приложении. Объявления могут отображаться
в различных форматах, которые легко добавляются в нативные
компоненты пользовательского интерфейса платформы. На Android
вы можете дополнительно отображать объявления о покупках в
приложении, позволяя пользователям приобретать
рекламируемые товары прямо в приложении.

30.

Firebase Test Lab
Firebase Test Lab - это облачная
инфраструктура тестирования
приложений, которая позволяет
протестировать ваше
приложение на различных
устройствах и конфигурациях,
чтобы вы могли получить более
полное представление о том, как
оно будет работать в руках
живых пользователей.

31.

Firebase Connect

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

51.

52.

53.

54.

Запись данных аутентификации
auth.createUserWithEmailAndPassword(user, pass).addOnCompleteListener(new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Toast.makeText(SignUp.this, "SignUp Successful", Toast.LENGTH_SHORT).show();
startActivity(new Intent(SignUp.this, SignIn.class));
} else {
Toast.makeText(SignUp.this, "SignUp Failed" + task.getException().getMessage(),
Toast.LENGTH_SHORT).show();
}
}
});

55.

Вход с данными
mAuth.signInWithEmailAndPassword(email, pass)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(SignIn.this, "Login Successful", Toast.LENGTH_SHORT).show();
startActivity(new Intent(SignIn.this, MainActivity.class));
finish();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(SignIn.this, "Login Failed", Toast.LENGTH_SHORT).show();
}
});

56.

Использование Google аутентификации
GoogleSignInOptions options = new
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id)) //add in
strings xml
.requestEmail()
.build();
googleSignInClient = GoogleSignIn.getClient(SignIn.this, options);

57.

Использование Google аутентификации
public void onGoogleSignIn(View view) {
Intent intent = googleSignInClient.getSignInIntent();
activityResultLauncher.launch(intent);
}

58.

Использование Google аутентификации
private final ActivityResultLauncher<Intent> activityResultLauncher =
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new
ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
Log.i("logs", "onActivityResult: 1");
if (result.getResultCode() == RESULT_OK) {
Log.i("logs", "onActivityResult: 2");
Task<GoogleSignInAccount> accountTask =
GoogleSignIn.getSignedInAccountFromIntent(result.getData());
try {
GoogleSignInAccount signInAccount =
accountTask.getResult(ApiException.class);
AuthCredential authCredential =
GoogleAuthProvider.getCredential(signInAccount.getIdToken(), null);
mAuth.signInWithCredential(authCredential).addOnCompleteListener(new
OnCompleteListener<AuthResult>() {

59.

Использование Google аутентификации
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.i("logs", "onActivityResult: oncomplete");
if (task.isSuccessful()) {
Log.i("logs", "onActivityResult: succes");
startActivity(new Intent(SignIn.this, MainActivity.class));
mAuth = FirebaseAuth.getInstance();
Toast.makeText(SignIn.this, "Signed in successfully!" + mAuth.getCurrentUser().getEmail(), Toast.LENGTH_SHORT).show();
} else {
Log.i("logs", "onActivityResult: unsucces");
Toast.makeText(SignIn.this, "Failed to sign in: " + task.getException(), Toast.LENGTH_SHORT).show();
}
}
});
} catch (ApiException e) {
Log.i("logs", "onActivityResult: error");
e.printStackTrace();
}
});
//endregion
}
}
}

60.

MainActivity
mainText = (TextView)findViewById(R.id.mainText);
mAuth = FirebaseAuth.getInstance();
mainText.setText(mAuth.getCurrentUser().getEmail());

61.

private void displayUserData() {
FirebaseUser user = mAuth.getCurrentUser();
if (user != null) {
String email = user.getEmail();
String displayName = user.getDisplayName();
String photoUrl = user.getPhotoUrl() != null ? user.getPhotoUrl().toString() : "No Photo URL";
String phoneNumber = user.getPhoneNumber();
String uid = user.getUid();
String providerId = user.getProviderId();
// Display data
mainText.setText("Email: " + email + "\n");
mainText.append("Display Name: " + displayName + "\n");
mainText.append("Photo URL: " + photoUrl + "\n");
mainText.append("Phone Number: " + phoneNumber + "\n");
mainText.append("User ID: " + uid + "\n");
mainText.append("Provider ID: " + providerId + "\n");
} else {
mainText.setText("No user is currently signed in.");
}
}

62.

RealTime Database
• Необходимо добавить зависимости
• Создать базу данных и выдать разрешения на запись

63.

Маленький прикольчик
pc_0 - Firebase Database connection was forcefully killed by the server.
Will not attempt reconnect. Reason: Database lives in a different
region. Please change your database URL to https://fir-lec-8a10edefault-rtdb.europe-west1.firebasedatabase.app
mDatabase = FirebaseDatabase.getInstance().getReference("users");
mDatabase = FirebaseDatabase.getInstance("https://fir-lec-8a10edefault-rtdb.europewest1.firebasedatabase.app").getReference("users");

64.

Crud операции
mDatabase.push().setValue(user);
mDatabase.child(userId).setValue(user);
mDatabase.child(userId).removeValue();

65.

Чтение всех элементов
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> dataList = new ArrayList<>();
uids = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String email = ds.child("email").getValue(String.class);
String name = ds.child("username").getValue(String.class); // Assuming you have a "name"
field
uids.add(ds.getKey());
dataList.add(email+" "+name);
}

66.

Простое отображение
ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this,
android.R.layout.simple_list_item_1, dataList);
userList.setAdapter(adapter);

67.

Чтение одного элемента
mDatabase.child(userId).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (!task.isSuccessful()) {
Log.e("firebase", "Error getting data", task.getException());
}
else {
DataSnapshot ds=task.getResult();
String email = ds.child("email").getValue(String.class);
String name = ds.child("username").getValue(String.class);
nameBox.setText(email);
yearBox.setText(name);
// Log.d("firebase", String.valueOf(task.getResult().getValue()));
}
}
});

68.

69.

Initialize Cloud Firestore
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.firestore.Firestore;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
// Use the application default credentials
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(credentials)
.setProjectId(projectId)
.build();
FirebaseApp.initializeApp(options);
Firestore db = FirestoreClient.getFirestore();

70.

Cloud Firestore
DocumentReference docRef = db.collection("users").document("aturing");
Map<String, Object> data = new HashMap<>();
data.put("first", "Alan");
data.put("middle", "Mathison");
data.put("last", "Turing");
data.put("born", 1912);
ApiFuture<WriteResult> result = docRef.set(data);
System.out.println("Update time : " + result.get().getUpdateTime());

71.

Cloud Firestore
ApiFuture<QuerySnapshot> query = db.collection("users").get();
QuerySnapshot querySnapshot = query.get();
List<QueryDocumentSnapshot> documents = querySnapshot.getDocuments();
for (QueryDocumentSnapshot document : documents) {
System.out.println("User: " + document.getId());
System.out.println("First: " + document.getString("first"));
if (document.contains("middle")) {
System.out.println("Middle: " + document.getString("middle"));
}
System.out.println("Last: " + document.getString("last"));
System.out.println("Born: " + document.getLong("born"));
}

72.

Delete documents
import { doc, deleteDoc } from "firebase/firestore";
await deleteDoc(doc(db, "cities", "DC"));

73.

Delete fields
DocumentReference docRef = db.collection("cities").document("BJ");
Map<String, Object> updates = new HashMap<>();
updates.put("capital", FieldValue.delete());
// Update and delete the "capital" field in the document
ApiFuture<WriteResult> writeResult = docRef.update(updates);
System.out.println("Update time : " + writeResult.get());

74.

Delete collections
void deleteCollection(CollectionReference collection, int batchSize) {
try {
ApiFuture<QuerySnapshot> future = collection.limit(batchSize).get();
int deleted = 0;
List<QueryDocumentSnapshot> documents = future.get().getDocuments();
for (QueryDocumentSnapshot document : documents) {
document.getReference().delete();
++deleted;
}
if (deleted >= batchSize) {
// retrieve and delete another batch
deleteCollection(collection, batchSize);
}
} catch (Exception e) {
System.err.println("Error deleting collection : " + e.getMessage());
}
}

75.

Cloud Firestore

76.

Cloud Firestore

77.

Cloud Firestore

78.

Cloud Firestore

79.

Cloud Firestore

80.

Cloud Firestore

81.

Cloud Firestore

82.

Cloud Firestore

83.

Cloud Firestore

84.

Cloud Firestore
English     Русский Правила