Будуємо мобільний додаток на Firebase - безкоштовному і потужному бекенда Google

  1. Зміст статті Новий сервіс Firebase від Google здатний покрити більшість потреб мобільного розробника...
  2. Детальніше, що там є цікавого
  3. А за що попросять гроші?
  4. Аутентифікація в додатку
  5. Продовження доступно тільки учасникам
  6. Варіант 2. Відкрий один матеріал

Зміст статті

Новий сервіс Firebase від Google здатний покрити більшість потреб мобільного розробника і вирішити проблеми, яких у тебе ще немає. Сервіс безкоштовний при дотриманні лімітів, а щоб за них вийти, потрібно дуже постаратися. У цій статті я почну перераховувати можливості сервісу і поділюся своїм досвідом роботи з ним.

Сказати, що по нашій вулиці пройшов інкасатор, - це нічого не сказати. Займемося вивченням інструменту впритул!

Farewell VK, hello Firebase

У своїх попередніх статтях я розглядав VK API як безкоштовний бекенд мобільних додатків . У нього є ряд переваг. Хостинг безлімітний, типів контенту багато, керувати ним може навіть школяр, досить пояснити йому структуру наповнення програми ...

Але один недолік фатальний - негнучкість сервера. Запис на стіні можна редагувати через якийсь час, і не вийде відправити у додаток повідомлення про її оновлення. Потрібно кожен раз викачувати всі об'єкти зі стіни і відстежувати всі зміни, строго перебираючи записи. Серйозні проекти так не працюють, і «вистачить це терпіти!» ©.

На наше щастя, Google викупила компанію Firebase і відкрила її для використання всім бажаючим.

Детальніше, що там є цікавого

Твори, рости, заробляй!

У нашому розпорядженні є:

  • Analytics - аналітика за додатком: розмір аудиторії, інформація про користувачів, події в додатку та інше.
  • Authentication - користувачі можуть прив'язати свої облікові записи до додатка, а до них ми можемо прив'язати будь-які дані. З коробки підтримуються наступні провайдери авторизації: Google, Facebook, Twitter, GitHub, анонімний вхід і імейл-пароль для своєї реєстрації. Бракує тільки VK-авторизації.

Просто включи свій провайдер

  • Realtime Database - справжнісінька база даних, працює з живими змінами в реальному часі.
  • Storage - сховище для файлів користувачів, можна легко зробити персональне сховище, а можна і ділитися файлами.
  • Hosting - тут просто моментальне розгортання веб-додатків і мобільних додатків за допомогою безпечної глобальної мережі доставки контенту.
  • Test Lab for Android - тестуй додатки Android на самих різних пристроях.
  • App Indexing - зв'яжи інформацію з веб-сайту з внутрішніми сторінками додатка, також є можливість індексувати дані додатки і відображати їх в результатах пошуку на пристрої.
  • Crash Reporting - збір інформації про збої в додатку (на ранніх версіях і сам був джерелом краш, але начебто полагодили).
  • Notifications - повідомлення, заміна старих Google Cloud Messaging.
  • Remote Config - спосіб змінювати поведінку програми прямо зі свого сервера, змінюючи потрібні параметри.
  • Dynamic Links - корисний спосіб прокинути контекст в додаток (наприклад, користувач читав про аспірин на твоєму сайті, перейшов в маркет, встановив додаток, і йому відкрилася сторінка з аспірином).
  • AdMob - рекламний сервіс з безліччю форматів, по праву займає лідируючі позиції в мобільній рекламі. У цій мережі реклами завжди багато, і вона модерується.

А за що попросять гроші?

Гроші з нас справедливо попросять, якщо наш бізнес дійсно розростеться. Коли він упреться в безкоштовні ліміти, платити нам вже буде з чого.

Безкоштовно нам є:

  • Realtime Database:
    • 100 одноразових підключень
    • 1 Гбайт сховища
    • 10 Гбайт в місяць трафіку
  • Storage:
    • 5 Гбайт сховища
    • 1 Гбайт в день трафіку
    • 20 000 операцій завантажень в день
    • 50 000 операцій скачування в день
  • Hosting:
    • 1 Гбайт сховища
    • 10 Гбайт в місяць трафіку
    • Custom domain hosting & SSL
  • Test Lab:
    • запуск не більше п'ятнадцяти тестів в день (десять на віртуальних і п'ять на фізичних пристроях)

Більш докладно читай тут .

Більш докладно читай   тут

Наш безкоштовний Spark

Аутентифікація в додатку

Щоб користувач міг зберігати налаштування програми на сервері, потрібно створити обліковий запис. Firebase дозволяє це робити за допомогою створення власного облікового запису, як на будь-якому сайті з імейлом-паролем. Також можна прив'язатися до облікових записів Google, Facebook, Twitter, GitHub. У своїх програмах я використовую акаунти Firebase і Google.

У своїх програмах я використовую акаунти Firebase і Google

Дозволені способи входу

Хороший приклад коду для натхнення ти знайдеш тут . А як зробити свою реєстрацію, виразно описано тут .

Для зв'язки Google-аккаунта з додатком я роблю наступне. У методі OnCreate потрібної Activity створюю об'єкти GoogleApiClient, FirebaseAuth і слухача аутентифікації FirebaseAuth.AuthStateListener.

// [START config_signin] // Configure Google Sign In GoogleSignInOptions gso = new GoogleSignInOptions.Builder (GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken (getString (R.string.default_web_client_id)) .requestEmail () .build (); // [END config_signin] mGoogleApiClient = new GoogleApiClient.Builder (this) .enableAutoManage (this / * FragmentActivity * /, this / * OnConnectionFailedListener * /) .addApi (Auth.GOOGLE_SIGN_IN_API, gso) .build (); // [START initialize_auth] mAuth = FirebaseAuth.getInstance (); // [END initialize_auth] // [START auth_state_listener] mAuthListener = new FirebaseAuth.AuthStateListener () {@Override public void onAuthStateChanged (@NonNull FirebaseAuth firebaseAuth) {FirebaseUser user = firebaseAuth.getCurrentUser (); if (user! = null) {// User is signed in Log.d (TAG, "onAuthStateChanged: signed_in:" + user.getUid ()); } Else {// User is signed out Log.d (TAG, "onAuthStateChanged: signed_out"); } // [START_EXCLUDE] updateUI (user); // [END_EXCLUDE]}}; // [END auth_state_listener]

Щоб запустити аутентифікацію, використовуємо простий метод:

private void signIn () {Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent (mGoogleApiClient); startActivityForResult (signInIntent, RC_SIGN_IN); }

Запущена активують запропонує нам вибрати обліковий запис Google з зберігаються на пристрої. Після вибору потрібно обробити результат в методі onActivityResult:

@Override public void onActivityResult (int requestCode, int resultCode, Intent data) {super.onActivityResult (requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent (...); if (requestCode == RC_SIGN_IN) {GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent (data); if (result.isSuccess ()) {// Google Sign In was successful, authenticate with Firebase GoogleSignInAccount account = result.getSignInAccount (); firebaseAuthWithGoogle (account); } Else {// Google Sign In failed, update UI appropriately // [START_EXCLUDE] Toast.makeText (SettingsActivity.this, R.string.auth_failed, Toast.LENGTH_SHORT) .show (); flipCard (); updateUI (null); // [END_EXCLUDE]}}}

Після виконання функції firebaseAuthWithGoogle спрацює наш слухач аутентифікації mAuthListener.

private void firebaseAuthWithGoogle (GoogleSignInAccount acct) {Log.d (TAG, "firebaseAuthWithGoogle:" + acct.getId ()); // [START_EXCLUDE silent] showProgressDialog (); // [END_EXCLUDE] AuthCredential credential = GoogleAuthProvider.getCredential (acct.getIdToken (), null); mAuth.signInWithCredential (credential) .addOnCompleteListener (this, new OnCompleteListener <AuthResult> () {@Override public void onComplete (@NonNull Task <AuthResult> task) {Log.d (TAG, "signInWithCredential: onComplete:" + task.isSuccessful ()); // If sign in fails, display a message to the user. // If sign in succeeds the auth state listener // will be notified and logic to handle the signed in // user can be handled in the listener. if (! task.isSuccessful ()) {Log.w (TAG, "signInWithCredential", task.getException ()); Toast.makeText (SettingsActivity.this, R.string.auth_failed, Toast.LENGTH_SHORT) .show (); } // [START_EXCLUDE] hideProgressDialog (); flipCard (); // [END_EXCLUDE]}}); }

Відключити додаток від облікового запису допоможе метод revokeAccess (): в його колбеке оновлюємо інтерфейс програми.

private void revokeAccess () {// Firebase sign out mAuth.signOut (); if (mGoogleApiClient.isConnected ()) // Google revoke access Auth.GoogleSignInApi.revokeAccess (mGoogleApiClient) .setResultCallback (new ResultCallback <Status> () {@Override public void onResult (@NonNull Status status) {updateUI (null);} }); }

Продовження доступно тільки учасникам

Варіант 1. Приєднайся до товариства «Xakep.ru», щоб читати всі матеріали на сайті

Членство в співтоваристві протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалами «Хакера», збільшить особисту накопичувальну знижку і дозволить накопичувати професійний рейтинг Xakep Score! Детальніше

Варіант 2. Відкрий один матеріал

Зацікавила стаття, але немає можливості стати членом клубу «Xakep.ru»? Тоді цей варіант для тебе! Зверни увагу: цей спосіб підходить тільки для статей, опублікованих більше двох місяців тому.


А за що попросять гроші?
Ru»?

Дополнительная информация

rss
Карта