Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Ayrıştırma Android Uygulamanızı Firebase'e geçirin

Hizmet çözümü olarak alternatif bir Arka Uç arayan Parse kullanıcısıysanız, Firebase Android uygulamanız için ideal bir seçim olabilir.

Bu kılavuzda, belirli hizmetlerin uygulamanıza nasıl entegre edileceği açıklanmaktadır. Temel Firebase kurulum talimatları için Android Kurulum kılavuzuna bakın.

Google Analytics

Google Analytics, uygulama kullanımı ve kullanıcı etkileşimi hakkında bilgi sağlayan ücretsiz bir uygulama ölçüm çözümüdür. Analytics, Firebase özellikleriyle entegre olur ve Firebase SDK'sını kullanarak tanımlayabileceğiniz 500'e kadar farklı etkinlik için sınırsız raporlama sunar.

Daha fazla bilgi edinmek için Google Analytics dokümanlarına bakın.

Önerilen Göç Stratejisi

Farklı analiz sağlayıcıları kullanmak, Google Analytics için kolayca geçerli olan yaygın bir senaryodur. İlk açılış, uygulama güncellemesi, cihaz modeli, yaş gibi Analytics'in otomatik olarak topladığı etkinliklerden ve kullanıcı özelliklerinden yararlanmak için uygulamanıza eklemeniz yeterlidir.

Özel etkinlikler ve kullanıcı mülkleri için, etkinlikleri ve mülkleri günlüğe kaydetmek için Parse Analytics ve Google Analytics'i kullanarak çift çözüm stratejisi uygulayarak yeni çözümü aşamalı olarak sunabilirsiniz.

Kod Karşılaştırma

Analytics'i Ayrıştırma

 // Start collecting data
ParseAnalytics.trackAppOpenedInBackground(getIntent());

Map<String, String> dimensions = new HashMap<String, String>();
// Define ranges to bucket data points into meaningful segments
dimensions.put("priceRange", "1000-1500");
// Did the user filter the query?
dimensions.put("source", "craigslist");
// Do searches happen more often on weekdays or weekends?
dimensions.put("dayType", "weekday");

// Send the dimensions to Parse along with the 'search' event
ParseAnalytics.trackEvent("search", dimensions);
 

Google Analytics

 // Obtain the FirebaseAnalytics instance and start collecting data
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

Bundle params = new Bundle();
// Define ranges to bucket data points into meaningful segments
params.putString("priceRange", "1000-1500");
// Did the user filter the query?
params.putString("source", "craigslist");
// Do searches happen more often on weekdays or weekends?
params.putString("dayType", "weekday");

// Send the event
mFirebaseAnalytics.logEvent("search", params);
 

Firebase Gerçek Zamanlı Veritabanı

Firebase Gerçek Zamanlı Veritabanı, NoSQL bulut tarafından barındırılan bir veritabanıdır. Veriler JSON olarak depolanır ve bağlı her istemciye gerçek zamanlı olarak senkronize edilir.

Daha fazla bilgi için Firebase Gerçek Zamanlı Veritabanı belgelerine bakın.

Ayrıştırma Verisi ile Farklar

Nesneler

Ayrıştırma ParseObject , JSON uyumlu verilerin anahtar / değer çiftlerini içeren bir ParseObject veya bunun bir alt sınıfını ParseObject . Veriler şematiktir, yani her ParseObject hangi anahtarların var olduğunu belirtmeniz ParseObject .

Tüm Firebase Gerçek Zamanlı Veritabanı verileri JSON nesneleri olarak depolanır ve ParseObject için eşdeğeri yoktur; mevcut JSON türlerine karşılık gelen türlerin JSON ağacı değerlerine yazmanız yeterlidir. Veritabanından okuma ve yazmayı basitleştirmek için Java nesnelerini kullanabilirsiniz.

Aşağıda, bir oyunun yüksek puanlarını nasıl kaydedebileceğinize bir örnek verilmiştir.

Ayrıştırma
 @ParseClassName("GameScore")
public class GameScore {
        public GameScore() {}
        public GameScore(Long score, String playerName, Boolean cheatMode) {
            setScore(score);
            setPlayerName(playerName);
            setCheatMode(cheatMode);
        }

        public void setScore(Long score) {
            set("score", score);
        }

        public Long getScore() {
            return getLong("score");
        }

        public void setPlayerName(String playerName) {
            set("playerName", playerName);
        }

        public String getPlayerName() {
            return getString("playerName");
        }

        public void setCheatMode(Boolean cheatMode) {
            return set("cheatMode", cheatMode);
        }

        public Boolean getCheatMode() {
            return getBoolean("cheatMode");
        }
}

// Must call Parse.registerSubclass(GameScore.class) in Application.onCreate
GameScore gameScore = new GameScore(1337, "Sean Plott", false);
gameScore.saveInBackground();
 
Firebase
 // Assuming we defined the GameScore class as:
public class GameScore {
        private Long score;
        private String playerName;
        private Boolean cheatMode;

        public GameScore() {}
        public GameScore(Long score, String playerName, Boolean cheatMode) {
            this.score = score;
            this.playerName = playerName;
            this.cheatMode = cheatMode;
        }

        public Long getScore() {
            return score;
        }

        public String getPlayerName() {
            return playerName;
        }

        public Boolean getCheatMode() {
            return cheatMode;
        }
}

// We would save it to our list of high scores as follows:
DatabaseReference mFirebaseRef = FirebaseDatabase.getInstance().getReference();
GameScore score = new GameScore(1337, "Sean Plott", false);
mFirebaseRef.child("scores").push().setValue(score);
 
Daha fazla ayrıntı için Android'de Veri Okuma ve Yazma kılavuzuna bakın.

Veri Arasındaki İlişkiler

Bir ParseObject başka bir ParseObject ilişkisi olabilir: herhangi bir nesne diğer nesneleri değer olarak kullanabilir.

Firebase Gerçek Zamanlı Veritabanında, ilişkiler ayrı yollara ayrılan düz veri yapıları kullanılarak ilişkiler daha iyi ifade edilir, böylece ayrı çağrılarda verimli bir şekilde indirilebilirler.

Aşağıda, bir blog uygulamasındaki yayınlar ile yazarları arasındaki ilişkiyi nasıl yapılandırabileceğinize bir örnek verilmiştir.

Ayrıştırma
 // Create the author
ParseObject myAuthor = new ParseObject("Author");
myAuthor.put("name", "Grace Hopper");
myAuthor.put("birthDate", "December 9, 1906");
myAuthor.put("nickname", "Amazing Grace");

// Create the post
ParseObject myPost = new ParseObject("Post");
myPost.put("title", "Announcing COBOL, a New Programming Language");

// Add a relation between the Post and the Author
myPost.put("parent", myAuthor);

// This will save both myAuthor and myPost
myPost.saveInBackground();
 
Firebase
 DatabaseReference firebaseRef = FirebaseDatabase.getInstance().getReference();
// Create the author
Map<String, String> myAuthor = new HashMap<String, String>();
myAuthor.put("name", "Grace Hopper");
myAuthor.put("birthDate", "December 9, 1906");
myAuthor.put("nickname", "Amazing Grace");

// Save the author
String myAuthorKey = "ghopper";
firebaseRef.child('authors').child(myAuthorKey).setValue(myAuthor);

// Create the post
Map<String, String> post = new HashMap<String, String>();
post.put("author", myAuthorKey);
post.put("title", "Announcing COBOL, a New Programming Language");
firebaseRef.child('posts').push().setValue(post);
 

Aşağıdaki veri düzeni sonuçtur.

{
  // Info about the authors
  "authors": {
    "ghopper": {
      "name": "Grace Hopper",
      "date_of_birth": "December 9, 1906",
      "nickname": "Amazing Grace"
    },
    ...
  },
  // Info about the posts: the "author" fields contains the key for the author
  "posts": {
    "-JRHTHaIs-jNPLXOQivY": {
      "author": "ghopper",
      "title": "Announcing COBOL, a New Programming Language"
    }
    ...
  }
}
Daha fazla bilgi için Veritabanınızı Yapılandırma kılavuzuna bakın.

Veri Okuma

Ayrıştırma bölümünde verileri belirli bir Ayrıştırma nesnesinin kimliğini kullanarak veya ParseQuery kullanarak sorgu ParseQuery .

Firebase'de, bir veritabanı başvurusuna eşzamansız bir dinleyici ekleyerek veri alırsınız. Dinleyici, verilerin ilk durumu için bir kez ve veriler değiştiğinde tekrar tetiklenir, bu nedenle verilerin değişip değişmediğini belirlemek için herhangi bir kod eklemenize gerek yoktur.

Aşağıda, "Nesneler" bölümünde sunulan örneğe dayalı olarak belirli bir oyuncu için skorları nasıl alabileceğinize bir örnek verilmiştir.

Ayrıştırma
 ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore");
query.whereEqualTo("playerName", "Dan Stemkoski");
query.findInBackground(new FindCallback<ParseObject>() {
    public void done(List<ParseObject> scoreList, ParseException e) {
        if (e == null) {
            for (ParseObject score: scoreList) {
                Log.d("score", "Retrieved: " + Long.toString(score.getLong("score")));
            }
        } else {
            Log.d("score", "Error: " + e.getMessage());
        }
    }
});
 
Firebase
 DatabaseReference mFirebaseRef = FirebaseDatabase.getInstance().getReference();
Query mQueryRef = mFirebaseRef.child("scores").orderByChild("playerName").equalTo("Dan Stemkoski");

// This type of listener is not one time, and you need to cancel it to stop
// receiving updates.
mQueryRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChild) {
        // This will fire for each matching child node.
        GameScore score = snapshot.getValue(GameScore.class);
        Log.d("score", "Retrieved: " + Long.toString(score.getScore());
    }
});
 
Kullanılabilir olay dinleyicisi türleri ve verilerin nasıl sipariş edileceği ve filtreleneceği hakkında daha fazla bilgi için Android'de Veri Okuma ve Yazma kılavuzuna bakın.

Önerilen Göç Stratejisi

Verilerinizi Yeniden Düşünün

Firebase Gerçek Zamanlı Veritabanı, verileri bağlı tüm istemcilerde milisaniye cinsinden senkronize etmek üzere optimize edilmiştir ve ortaya çıkan veri yapısı, Ayrıştırma çekirdek verilerinden farklıdır. Bu, taşımanızın ilk adımının aşağıdakiler dahil verilerinizde hangi değişikliklerin yapılmasını gerektirdiği anlamına gelir:

  • Ayrıştırma nesnelerinizin Firebase verilerine nasıl eşlenmesi gerekir?
  • Ebeveyn-çocuk ilişkiniz varsa, verilerinizi ayrı çağrılarda verimli bir şekilde indirilebilmesi için verilerin farklı yollara nasıl bölüneceği.

Verilerinizi Taşıma

Firebase'deki verilerinizi nasıl yapılandıracağınıza karar verdikten sonra, uygulamanızın her iki veritabanına da yazması gereken süreyi nasıl yöneteceğinizi planlamanız gerekir. Seçimleriniz:

Arka Plan Senkronizasyonu

Bu senaryoda, uygulamanın iki sürümü vardır: Parse kullanan eski sürüm ve Firebase kullanan yeni bir sürüm. İki veritabanı arasındaki senkronizasyonlar, Parse Cloud Code (Parse to Firebase) tarafından yönetilir; kodunuz Firebase'deki değişiklikleri dinler ve bu değişiklikleri Parse ile senkronize eder. Yeni sürümü kullanmaya başlamadan önce şunları yapmanız gerekir:

  • Mevcut Ayrıştırma Verilerinizi yeni Firebase yapısına dönüştürün ve Firebase Gerçek Zamanlı Veritabanına yazın.
  • Eski istemciler tarafından Ayrıştırma Verisinde yapılan Firebase Gerçek Zamanlı Veritabanı değişikliklerine yazmak için Firebase REST API'sini kullanan Ayrıştırma Bulut Kodu işlevlerini yazma.
  • Firebase'deki değişiklikleri dinleyen ve bunları Ayrıştırma veritabanıyla senkronize eden bir kod yazın ve dağıtın.

Bu senaryo, eski ve yeni kodların temiz bir şekilde ayrılmasını sağlar ve istemcileri basit tutar. Bu senaryonun zorlukları, ilk dışa aktarmada büyük veri kümelerini ele almak ve çift yönlü senkronizasyonun sonsuz özyineleme oluşturmamasını sağlamaktır.

Çift Yazma

Bu senaryoda, eski istemciler tarafından Ayrıştırma Verilerinden Firebase Gerçek Zamanlı Veritabanı ile yapılan değişiklikleri senkronize etmek için Ayrıştırma Bulut Kodunu kullanarak uygulamanın hem Firebase hem de Parse kullanan yeni bir sürümünü yazarsınız. Uygulamanın yalnızca Ayrıştırma sürümünden yeterli sayıda kişi taşındığında, Ayrıştırma kodunu çift yazma sürümünden kaldırabilirsiniz.

Bu senaryo herhangi bir sunucu tarafı kodu gerektirmez. Dezavantajları, erişilemeyen verilerin taşınmaması ve uygulamanızın boyutunun her iki SDK'nın kullanılmasıyla artırılmasıdır.

Firebase Kimlik Doğrulaması

Firebase Kimlik Doğrulaması, şifreleri ve Google, Facebook ve Twitter gibi popüler birleşik kimlik sağlayıcıları kullanarak kullanıcıların kimliğini doğrulayabilir. Ayrıca, tüm platformlarda uygulamanız için tam bir kimlik doğrulama deneyimi uygulamak ve sürdürmek için gereken önemli yatırımdan tasarruf etmek için kullanıcı arayüzü kitaplıkları sağlar.

Daha fazla bilgi için Firebase Kimlik Doğrulaması belgelerine bakın.

Ayrıştırma Kimlik Doğrulaması ile Farklılıklar

Ayrıştırma, kullanıcı hesabı yönetimi için gereken işlevselliği otomatik olarak işleyen ParseUser adlı özel bir kullanıcı sınıfı sağlar. ParseUser bir alt sınıfıdır ParseObject aracı kullanıcı veri Ayrıştırma veri mevcuttur ve diğerleri gibi ek alanlar ile uzatılabilir, ParseObject .

FirebaseUser , ayrı bir projenin kullanıcı veritabanında depolanan sabit bir dizi temel özelliğe (benzersiz bir kimlik, birincil e-posta adresi, bir ad ve bir fotoğraf URL'si) sahiptir; bu özellikler kullanıcı tarafından güncellenebilir. FirebaseUser nesnesine doğrudan başka özellikler ekleyemezsiniz; bunun yerine, ek özellikleri Firebase Gerçek Zamanlı Veritabanınızda saklayabilirsiniz.

Aşağıda, bir kullanıcıya nasıl kaydolabileceğiniz ve ek telefon numarası alanı ekleyebileceğinize ilişkin bir örnek verilmiştir.

Ayrıştırma
 ParseUser user = new ParseUser();
user.setUsername("my name");
user.setPassword("my pass");
user.setEmail("email@example.com");

// other fields can be set just like with ParseObject
user.put("phone", "650-253-0000");

user.signUpInBackground(new SignUpCallback() {
    public void done(ParseException e) {
        if (e == null) {
            // Hooray! Let them use the app now.
        } else {
            // Sign up didn't succeed. Look at the ParseException
            // to figure out what went wrong
        }
    }
});
 
Firebase
 FirebaseAuth mAuth = FirebaseAuth.getInstance();

mAuth.createUserWithEmailAndPassword("email@example.com", "my pass")
    .continueWithTask(new Continuation<AuthResult, Task<Void>> {
        @Override
        public Task<Void> then(Task<AuthResult> task) {
            if (task.isSuccessful()) {
                FirebaseUser user = task.getResult().getUser();
                DatabaseReference firebaseRef = FirebaseDatabase.getInstance().getReference();
                return firebaseRef.child("users").child(user.getUid()).child("phone").setValue("650-253-0000");
            } else {
                // User creation didn't succeed. Look at the task exception
                // to figure out what went wrong
                Log.w(TAG, "signInWithEmail", task.getException());
            }
        }
    });
 

Önerilen Göç Stratejisi

Hesapları Taşıma

Kullanıcı hesaplarını Ayrıştırma'dan Firebase'e geçirmek için kullanıcı veritabanınızı bir JSON veya CSV dosyasına aktarın, ardından Firebase CLI's auth:import komutunu kullanarak dosyayı Firebase projenize auth:import .

İlk olarak, kullanıcı veritabanınızı Ayrıştırma konsolundan veya kendi barındırdığınız veritabanından dışa aktarın. Örneğin, Ayrıştırma konsolundan dışa aktarılan bir JSON dosyası aşağıdaki gibi görünebilir:

{ // Username/password user
  "bcryptPassword": "$2a$10$OBp2hxB7TaYZgKyTiY48luawlTuYAU6BqzxJfpHoJMdZmjaF4HFh6",
  "email": "user@example.com",
  "username": "testuser",
  "objectId": "abcde1234",
  ...
},
{ // Facebook user
  "authData": {
    "facebook": {
      "access_token": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
      "expiration_date": "2017-01-02T03:04:05.006Z",
      "id": "1000000000"
    }
  },
  "username": "wXyZ987654321StUv",
  "objectId": "fghij5678",
  ...
}

Ardından, dışa aktarılan dosyayı Firebase CLI için gereken biçime dönüştürün. Ayrıştırma kullanıcılarınızın localId , localId kullanıcılarınızın objectId olarak kullanın. Ayrıca base64, Parse bcryptPassword değerlerini kodlar ve passwordHash alanında kullanır. Örneğin:

{
  "users": [
    {
      "localId": "abcde1234",  // Parse objectId
      "email": "user@example.com",
      "displayName": "testuser",
      "passwordHash": "JDJhJDEwJE9CcDJoeEI3VGFZWmdLeVRpWTQ4bHVhd2xUdVlBVTZCcXp4SmZwSG9KTWRabWphRjRIRmg2",
    },
    {
      "localId": "fghij5678",  // Parse objectId
      "displayName": "wXyZ987654321StUv",
      "providerUserInfo": [
        {
          "providerId": "facebook.com",
          "rawId": "1000000000",  // Facebook ID
        }
      ]
    }
  ]
}

Son olarak, dönüştürülen dosyayı Firebase CLI ile içe aktarın ve bcrypt öğesini hash algoritması olarak belirtin:

firebase auth:import account_file.json --hash-algo=BCRYPT

Kullanıcı Verilerini Taşıma

Kullanıcılarınız için ek veriler saklıyorsanız, veri taşıma bölümünde açıklanan stratejileri kullanarak bu verileri Firebase Gerçek Zamanlı Veritabanı'na taşıyabilirsiniz. Hesapları taşıma bölümünde açıklanan akışı kullanarak taşıyorsanız, Firebase hesaplarınız Ayrıştırma hesaplarınızın kimlikleriyle aynı olur ve kullanıcı kimliği tarafından anahtarlanan ilişkileri kolayca taşımanıza ve yeniden oluşturmanıza olanak tanır.

Firebase Bulut Mesajlaşma

Firebase Cloud Messaging (FCM), iletileri ve bildirimleri ücretsiz olarak güvenilir bir şekilde iletmenizi sağlayan platformlar arası bir mesajlaşma çözümüdür. Bildirimler oluşturucusu, mobil uygulama geliştiricileri için hedefli kullanıcı bildirimleri sağlayan Firebase Cloud Messaging üzerine kurulmuş ücretsiz bir hizmettir.

Daha fazla bilgi için Firebase Bulut Mesajlaşma belgelerine bakın.

Ayrıştırma Push Bildirimleriyle Farklılıklar

Bildirimler için kaydedilmiş bir aygıta yüklenen her Ayrıştırma uygulamasının, bildirimleri hedeflemek için gereken tüm verileri depoladığınız ilişkili bir Installation nesnesi vardır. Installation , ParseUser bir alt ParseUser , yani Installation örneklerinize istediğiniz ek verileri ekleyebilirsiniz.

Bildirimler oluşturucusu, uygulama, uygulama sürümü ve cihaz dili gibi bilgilere dayalı olarak önceden tanımlanmış kullanıcı segmentleri sağlar. Kitle oluşturmak için Google Analytics etkinliklerini ve özelliklerini kullanarak daha karmaşık kullanıcı segmentleri oluşturabilirsiniz. Daha fazla bilgi için kitlelerin yardım kılavuzuna bakın. Bu hedefleme bilgileri, Firebase Gerçek Zamanlı Veritabanında görünmez.

Önerilen Göç Stratejisi

Geçiş Cihazı Jetonları

Yazma sırasında, Ayrıştırma Android SDK'sı FCM kayıt belirteçlerinin daha eski bir sürümünü kullanır, Bildirimler bestecisinin sunduğu özelliklerle uyumlu değildir.

Uygulamanıza FCM SDK'yı ekleyerek yeni bir jeton alabilirsiniz; ancak, bu, Ayrıştırma SDK'si tarafından bildirim almak için kullanılan belirteci geçersiz kılabilir. Bundan kaçınmak istiyorsanız, Ayrıştırma SDK'sını hem Ayrıştırma'nın gönderen kimliğini hem de gönderen kimliğinizi kullanacak şekilde ayarlayabilirsiniz. Bu şekilde, Parse SDK tarafından kullanılan jetonu geçersiz kılmazsınız, ancak Parse projesini kapattığında bu geçici çözümün çalışmayı durduracağını unutmayın.

Kanalları FCM Konularına Geçirme

Bildirimleri göndermek için Ayrıştırma kanallarını kullanıyorsanız, aynı yayıncı-abone modelini sağlayan FCM konularına geçebilirsiniz. Ayrıştırma'dan FCM'ye geçişi işlemek için, ayrıştırma kanallarından çıkmak için Ayrıştırma SDK'sını ve karşılık gelen FCM konularına abone olmak için FCM SDK'sını kullanan uygulamanın yeni bir sürümünü yazabilirsiniz. Uygulamanın bu sürümünde, ayrıştırma SDK'sında bildirim almayı devre dışı bırakmanız ve aşağıdakileri uygulamanızın bildiriminden kaldırmanız gerekir:

 <service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParsePushBroadcastReceiver"
  android:exported="false">
<intent-filter>
<action android:name="com.parse.push.intent.RECEIVE" />
<action android:name="com.parse.push.intent.DELETE" />
<action android:name="com.parse.push.intent.OPEN" />
</intent-filter>
</receiver>
<receiver android:name="com.parse.GcmBroadcastReceiver"
  android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />

<!--
IMPORTANT: Change "com.parse.starter" to match your app's package name.
-->
<category android:name="com.parse.starter" />
</intent-filter>
</receiver>

<!--
IMPORTANT: Change "YOUR_SENDER_ID" to your GCM Sender Id.
-->
<meta-data android:name="com.parse.push.gcm_sender_id"
  android:value="id:YOUR_SENDER_ID" />;
 

Örneğin, kullanıcınız "Devler" konusuna abone olsaydı, şöyle bir şey yaparsınız:

 ParsePush.unsubscribeInBackground("Giants", new SaveCallback() {
    @Override
    public void done(ParseException e) {
        if (e == null) {
            FirebaseMessaging.getInstance().subscribeToTopic("Giants");
        } else {
            // Something went wrong unsubscribing
        }
    }
});
 

Bu stratejiyi kullanarak hem Ayrıştırma kanalına hem de karşılık gelen FCM konusuna hem eski hem de yeni sürümlerin kullanıcılarını destekleyen mesajlar gönderebilirsiniz. Yeterli sayıda kullanıcı uygulamanın Yalnızca Ayrıştırılmış sürümünden taşındığında, bu sürümde gün batımı yapabilir ve yalnızca FCM'yi kullanarak göndermeye başlayabilirsiniz.

Daha fazla bilgi için FCM konu belgelerine bakın.

Firebase Uzaktan Yapılandırma

Firebase Remote Config, kullanıcıların bir uygulama güncellemesi indirmesine gerek kalmadan uygulamanızın davranışını ve görünümünü değiştirmenizi sağlayan bir bulut hizmetidir. Remote Config kullanırken, uygulamanızın davranışını ve görünümünü kontrol eden uygulama içi varsayılan değerler oluşturursunuz. Ardından, daha sonra tüm uygulama kullanıcıları veya kullanıcı tabanınızın bölümleri için uygulama içi varsayılan değerleri geçersiz kılmak için Firebase konsolunu kullanabilirsiniz.

Firebase Remote Config, farklı çözümleri test etmek ve daha fazla istemciyi dinamik olarak farklı bir sağlayıcıya geçirmek istediğiniz durumlarda geçişleriniz sırasında çok yararlı olabilir. Örneğin, uygulamanızın veriler için hem Firebase hem de Parse kullanan bir sürümüne sahipseniz, hangi istemcilerin Firebase'den okuduğunu belirlemek ve kademeli olarak yüzdeyi artırmak için rastgele bir yüzdelik kuralı kullanabilirsiniz.

Firebase Remote Config hakkında daha fazla bilgi edinmek için Remote Config girişine bakın .

Ayrıştırma Yapılandırması ile Farklılıklar

Ayrıştırma yapılandırmasıyla, Ayrıştırma Yapılandırması Kontrol ParseConfig uygulamanıza anahtar / değer çiftleri ekleyebilir ve ardından istemcide ParseConfig getirebilirsiniz. ParseConfig her ParseConfig örneği her zaman değiştirilemez. Gelecekte ParseConfig yeni bir ParseConfig aldığınızda, varolan herhangi bir ParseConfig örneğini değiştirmez, bunun yerine yeni bir ParseConfig getCurrentConfig() aracılığıyla kullanılabilir hale getirir getCurrentConfig() .

Firebase Remote Config ile, Firebase konsolundan geçersiz kılabileceğiniz anahtar / değer çiftleri için uygulama içi varsayılanlar oluşturursunuz ve uygulamanızın kullanıcı deneyiminde kullanıcı tabanınızın farklı segmentlerine varyasyonlar sağlamak için kurallar ve koşullar kullanabilirsiniz. Firebase Remote Config, anahtar / değer çiftlerini uygulamanız için kullanılabilir hale getiren tekli bir sınıf uygular. Başlangıçta singleton, uygulama içi tanımladığınız varsayılan değerleri döndürür. Uygulamanız için uygun olan herhangi bir anda sunucudan yeni bir değer kümesi alabilirsiniz; yeni küme başarıyla getirildikten sonra, yeni değerleri uygulama için kullanılabilir hale getirmek üzere ne zaman etkinleştirileceğini seçebilirsiniz.

Önerilen Göç Stratejisi

Ayrıştırma yapılandırmanızın anahtar / değer çiftlerini Firebase konsoluna kopyalayıp Firebase Uzaktan Yapılandırma kullanan uygulamanın yeni bir sürümünü dağıtarak Firebase Uzaktan Yapılandırma'ya geçebilirsiniz.

Hem Ayrıştırma Yapılandırması hem de Firebase Uzaktan Yapılandırma ile deneme yapmak istiyorsanız, uygulamanın yalnızca Ayrıştırma sürümünden yeterli sayıda kullanıcı taşınana kadar her iki SDK'yı kullanan yeni bir sürümünü dağıtabilirsiniz.

Kod Karşılaştırma

Ayrıştırma

 ParseConfig.getInBackground(new ConfigCallback() {
    @Override
    public void done(ParseConfig config, ParseException e) {
        if (e == null) {
            Log.d("TAG", "Yay! Config was fetched from the server.");
        } else {
            Log.e("TAG", "Failed to fetch. Using Cached Config.");
            config = ParseConfig.getCurrentConfig();
        }

        // Get the message from config or fallback to default value
        String welcomeMessage = config.getString("welcomeMessage", "Welcome!");
    }
});
 

Firebase

 mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
// Set defaults from an XML resource file stored in res/xml
mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);

mFirebaseRemoteConfig.fetch()
    .addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Log.d("TAG", "Yay! Config was fetched from the server.");
            // Once the config is successfully fetched it must be activated before newly fetched
            // values are returned.
            mFirebaseRemoteConfig.activateFetched();
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            Log.e("TAG", "Failed to fetch. Using last fetched or default.");
        }
    })

// ...

// When this is called, the value of the latest fetched and activated config is returned;
// if there's none, the default value is returned.
String welcomeMessage = mFirebaseRemoteConfig.getString("welcomeMessage");