Parse Android uygulamanızı Firebase'e taşıma

Ayrıştırıcı olarak başka bir Arka Uç arayan Hizmet çözümü olan Firebase, Android uygulamanız için ideal seçim olabilir.

Bu kılavuzda, belirli hizmetleri uygulamanıza nasıl entegre edeceğiniz açıklanmaktadır. Örneğin, Temel Firebase kurulumu talimatları için Android Kurulumu'na bakın rehberini inceleyin.

Google Analytics

Google Analytics, uygulama kullanımı hakkında bilgi sağlayan ücretsiz bir uygulama ölçüm çözümüdür ve en iyi uygulamaları paylaşacağız. Analytics, Firebase özellikleriyle entegre olarak size sınırsız erişim sunar kullanarak tanımlayabileceğiniz 500'e kadar farklı etkinlik için rapor oluşturabilirsiniz.

Daha fazla bilgi edinmek için Google Analytics belgeye bakın.

Önerilen Taşıma Stratejisi

Farklı analiz sağlayıcıları kullanmak, her türlü analiz için Google Analytics Uygulamanıza ekleyerek etkili etkinliklerden ve kullanıcı özelliklerinden Analytics; ilk açılış, uygulama güncelleme, cihaz modeli ve yaş gibi bilgileri otomatik olarak toplar.

Özel etkinlikler ve kullanıcı özellikleri için, Etkinlikleri ve mülkleri günlüğe kaydetmek için hem Analytics'i hem de Google Analytics'yi ayrıştırarak ve yeni çözümü kademeli olarak kullanıma sunacaktır.

Kod Karşılaştırması

Analizi 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 Realtime Database

Firebase Realtime Database, bulutta barındırılan bir NoSQL veritabanıdır. Veriler JSON biçiminde depolanır ve otomatik olarak senkronize edilir.

Daha fazla bilgi edinmek için Firebase Realtime Database belgeye bakın.

Verileri Ayrıştırma Verileriyle Farklar

Nesneler

Ayrıştırma'da, anahtar/değer çiftleri içeren bir ParseObject veya bunun bir alt sınıfını saklarsınız. JSON uyumlu veri var. Veriler şemasız olduğundan hangi anahtarların her ParseObject için geçerlidir.

Tüm Firebase Realtime Database verileri JSON nesneleri olarak depolanır ve ParseObject; tek yapmanız gereken bu işlem için karşılık gelen türlerin kullanılabilir JSON türlerine bakalım.

Aşağıda, bir oyunun rekorlarını nasıl kaydedebileceğinize dair bir örnek verilmiştir.

Ayrıştır
@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 bilgi için Android'de Veri Okuma ve Yazma rehberi

Veriler Arasındaki İlişkiler

ParseObject, başka bir ParseObject ile ilişkili olabilir: herhangi bir başka nesneleri değer olarak kullanabilir.

Firebase Realtime Database'da ilişkiler, farklı dillerdeki düz veri yapıları kullanılarak daha iyi ifade verileri ayrı yollara bölmek ve böylece ayrı görüşmelerde etkili bir şekilde indirilebilmelerini sağlamak.

Aşağıda, bir Google Etiket Yöneticisi'ndeki yayınlar arasındaki ilişkiyi ve yazarları.

Ayrıştır
// 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);

Sonuç, aşağıdaki veri düzenidir.

{
  // 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 rehberini inceleyin.

Verileri Okuma

Ayrıştırma'da, verileri belirli bir Parse nesnesinin kimliğini kullanarak veya ParseQuery kullanarak sorgu yürütebilirsiniz.

Firebase'de, verileri bir veritabanı referansına eşzamansız işleyici ekleyerek alırsınız. İlgili içeriği oluşturmak için kullanılan işleyici, 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 eklemeniz gerekmez.

Aşağıda, skor tablosuna göre, oyun türüne göre belirli bir oyuncu için "Nesneler" bölümünde sunulan örneğe bakın.

Ayrıştır
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());
    }
});
Mevcut etkinlik işleyici türleri hakkında daha fazla bilgi Verilerin nasıl sıralanacağı ve filtreleneceği konusunda, Android'de Veri Okuma ve Yazma rehberini inceleyin.

Önerilen Taşıma Stratejisi

Verilerinizi Yeniden Değerlendirme

Firebase Realtime Database, tüm bağlı cihazlarda verileri milisaniyeler içinde senkronize edecek şekilde optimize edilmiştir ve ortaya çıkan veri yapısı, Parse çekirdek verilerinden farklıdır. Bu, Taşıma işleminizin ilk adımı, aşağıdakiler de dahil olmak üzere verileriniz için gereken değişiklikleri göz önünde bulundurmaktır:

  • Parse nesnelerinizin Firebase verileriyle nasıl eşleşmesi gerekir?
  • Üst-alt ilişkileriniz varsa verilerinizi farklı yollar arasında nasıl böleceğiniz ve ayrı görüşmelerde verilebilir şekilde indirilebilir.

Verilerinizi Taşıma

Firebase'de verilerinizi nasıl yapılandıracağınıza karar verdikten sonra, Bu süre boyunca uygulamanızın her iki veritabanına da yazması gerekir. Seçenekleriniz şunlardır:

Arka Plan Senkronizasyonu

Bu senaryoda uygulamanın iki sürümü bulunmaktadır: Parse kullanan eski sürüm ve yeni sürüm veya Firebase için Google Analytics'i kullanın. İki veritabanı arasındaki senkronizasyonlar Parse Cloud Code (Ayrıştırma) tarafından işlenir Firebase'e aktarma) sayesinde, 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 Realtime Database
  • Firebase REST API kullanan Ayrıştırma Cloud Code işlevlerini Eski istemciler tarafından Ayrıştırma Verilerinde Firebase Realtime Database değişiklik yapıldı.
  • Firebase'deki değişiklikleri dinleyen ve bunları Parse'a senkronize eden bir kod yazıp dağıtın

Bu senaryo, eski ve yeni kodun sorunsuz bir şekilde birbirinden ayrılmasını sağlar ve müşterileri basit tutar. İlgili içeriği oluşturmak için kullanılan Bu senaryonun en zorlayıcıları, ilk dışa aktarım sırasında büyük veri kümelerini ele almak ve çift yönlü senkronizasyon, sonsuz yineleme oluşturmaz.

Çift Yazma

Bu senaryoda, uygulamanın hem Firebase hem de Parse kullanan yeni bir sürümünü yazmak için Eski istemciler tarafından yapılan değişiklikleri Parse Verilerinden Firebase Realtime Database Uygulamanın salt Parse sürümünden yeterli sayıda kullanıcı geçiş yaptığında çift yazılan sürümden Ayrıştırma kodunu kaldırabilirsiniz.

Bu senaryo, herhangi bir sunucu tarafı kodu gerektirmez. Dezavantajları ise ve uygulamanızın boyutunun her iki SDK'nın kullanımı tarafından artırılacağını da hatırlatmak isteriz.

Firebase Authentication

Firebase Authentication, şifreleri ve popüler birleşik kimlik sağlayıcılarını kullanarak kullanıcıların kimliğini doğrulayabilir Google, Facebook ve Twitter gibi. Ayrıca kullanıcı arayüzü kitaplıkları sayesinde uygulamanızda eksiksiz bir kimlik doğrulama deneyimi sunmak ve sürdürmek için gereken yatırım tüm platformlarda kullanılabilir.

Daha fazla bilgi edinmek için Firebase Authentication belgeye bakın.

Parse Auth ile Farklar

Ayrıştırma, ParseUser adında özel bir kullanıcı sınıfı sağlar. Bu sınıf, otomatik olarak işlenir. Kullanıcı hesabı yönetimi için gereken işlevsellik. ParseUser şunun bir alt sınıfıdır: ParseObject, yani kullanıcı verilerinin Ayrıştırma Verilerinde bulunduğu ve ek alanları (diğer tüm ParseObject gibi) kullanabilirsiniz.

FirebaseUser, benzersiz kimlik, birincil e-posta adresi, Ayrı bir projenin kullanıcı veritabanında depolanan bir ad ve fotoğraf URL'si; bu özellikler gösterir. FirebaseUser nesnesine doğrudan başka özellikler ekleyemezsiniz; bunun yerine ek özellikleri Firebase Realtime Database içinde depolayabilirsiniz.

Aşağıda, kullanıcıları nasıl ekleyebileceğiniz ve ek bir telefon numarası alanı nasıl ekleyebileceğinizi gösteren bir örnek verilmiştir.

Ayrıştır
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 Taşıma Stratejisi

Hesapları Taşı

Kullanıcı hesaplarını Parse'dan Firebase'e taşımak için kullanıcı veritabanınızı CSV veya CSV dosyası olarak indirin, ardından şu dosyayı kullanarak dosyayı Firebase projenize aktarın: Firebase CLI'ın auth:import komutuna ekleyin.

Öncelikle, Parse konsolundan veya kendi barındırdığınız kullanıcıdan kullanıcı veritabanınızı dışa aktarın Örneğin, Parse konsolundan dışa aktarılan bir JSON dosyası örneğin:

{ // 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'in gerektirdiği biçime dönüştürün KSA. Parse kullanıcılarınızın objectId öğesini Firebase kullanıcılarınızın localId kadarı. Ayrıca, base64 kodlayın: Ayrıştırma işlemindeki bcryptPassword değerleri ve bunları passwordHash içinde kullanın girin. Ö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 yapın. örneğine bakalım:

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

Kullanıcı Verilerini Taşı

Kullanıcılarınız için ek veriler depoluyorsanız bu verileri Firebase Realtime Database hizmetine taşıyabilirsiniz ve veri taşıma bölümünde açıklanan stratejiler uygulanır. Taşıma işlemini gerçekleştirirseniz hesap taşıma bölümünde açıklanan akışı kullanan hesaplarınızı yönetmek için Firebase hesapları Parse hesaplarınızla aynı kimliklere sahiptir, böylece kolayca taşıma ve yeniden oluşturma kullanıcı kimliği ile anahtarlanan tüm ilişkiler.

Firebase Cloud Messaging

Firebase Cloud Messaging (FCM), güvenli bir şekilde mesajlaşmanıza olanak tanıyan platformlar arası bir mesajlaşma çözümüdür ücretsiz olarak mesaj ve bildirim gönderin. Bildirimler oluşturucu, Mobil uygulama geliştiriciler için hedeflenmiş kullanıcı bildirimlerini etkinleştiren Firebase Cloud Messaging uygulamasında.

Daha fazla bilgi edinmek için Firebase Cloud Messaging dokümana bakın.

Ayrıştırma push bildirimleriyle olan farklılıklar

Bildirimler için kayıtlı bir cihazda yüklü her Ayrıştırma uygulamasının ilişkilendirilmiş bir numarası vardır Installation nesnesi içerir. Installation, ParseUser etiketinin bir alt sınıfıdır. Bu nedenle şunları ekleyebilirsiniz: Installation örneklerinize eklemek istediğiniz tüm ek veriler.

Bildirim oluşturucu; uygulama, uygulama sürümü ve cihaz gibi bilgilere dayalı olarak önceden tanımlanmış kullanıcı segmentleri sağlar dili'ne dokunun. Google Analytics etkinliklerini ve özelliklerini kullanarak daha karmaşık kullanıcı segmentleri oluşturabilirsiniz. kullanarak kitle oluşturabilirsiniz. Kitleleri inceleyin yardım rehberine göz atın. Bu hedefleme bilgileri Firebase Realtime Database içinde görünmez.

Önerilen Taşıma Stratejisi

Cihaz Jetonlarını Taşıma

Bu yazının yazıldığı sırada Parse Android SDK'sı, FCM'nin eski bir sürümünü kullanıyor. özellikleri ile uyumlu olmayan yeni bir e-posta adresi oluşturabilirsiniz.

FCM SDK'sını uygulamanıza ekleyerek yeni bir jeton alabilirsiniz; ancak, bu durum, Parse SDK'sının bildirim almak için kullandığı jetonu geçersiz kılabilir. Bunu önlemek istiyorsanız Parse SDK'sını her iki Parse'ın gönderen kimliğini de kullanacak şekilde ayarlayabilirsiniz ve gönderen kimliğiniz. Bu şekilde, Parse SDK'sı tarafından kullanılan jetonu geçersiz kılmazsınız. ancak Parse projesini sonlandırdığında bu çözümün artık çalışmayacağını unutmayın.

Kanallar FCM Konularına Taşınıyor

Bildirim göndermek için Kanalları Ayrıştırma özelliğini kullanıyorsanız, aşağıdakileri sunan FCM konularına geçebilirsiniz: modeline sahip olmanız gerekir. Ayrıştırma'dan FCM'ye geçişi gerçekleştirmek için yeni bir sürüm yazabilirsiniz abonelik için Parse kanallarının aboneliğinden çıkmak üzere Parse SDK'sını ve FCM SDK'sını kullanan uygulamanın ilgili FCM konularıyla ilgilidir. Uygulamanın bu sürümünde, şurada bildirim almayı devre dışı bırakmanız gerekir: Parse SDK'sını kullanarak uygulamanızın manifest dosyasından aşağıdaki öğeyi kaldırın:

<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 "Giants"a aboneyse şö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 Parse kanalına hem de ilgili kanala mesaj gönderebilirsiniz FCM konu, hem eski hem de yeni sürümlerin kullanıcılarını destekleme Gmail'den yeterli sayıda kullanıcı Uygulamanın yalnızca ayrıştırılan sürümünü kullanıyorsanız bu sürümü kullanımdan kaldırabilir ve yalnızca FCM uygulamasını kullanarak göndermeye başlayabilirsiniz.

Bkz. FCM konu dokümanı konulu videomuzu izleyin.

Firebase Remote Config

Firebase Remote Config, cihazınızın davranışını ve görünümünü değiştirmenizi sağlayan bir bulut hizmetidir uygulamasını kullanarak kullanıcıların uygulama güncellemesi indirmesini gerektirmez. Remote Config'i kullanırken uygulama içi uygulamanızın davranışını ve görünümünü kontrol eden varsayılan değerlerdir. Daha sonra, Firebase konsolunu kullanarak, tüm uygulama kullanıcıları veya kullanıcı tabanınızın segmentleri için uygulama içi varsayılan değerleri geçersiz kılabilirsiniz.

Firebase Remote Config, test etmek istediğiniz durumlarda, taşıma işlemleriniz sırasında çok yararlı olabilir daha fazla müşteriyi dinamik olarak farklı bir sağlayıcıya aktarabilme olanağı. Örneğin, Uygulamanızın veriler için hem Firebase hem de Parse kullanan bir sürümü varsa hangi istemcilerin Firebase'den okuduğunu belirlemek için rastgele yüzdelik dilim kuralı uygulayın ve yüzdeyi kademeli olarak artırın.

Firebase Remote Config hakkında daha fazla bilgi için bkz. Remote Config giriş.

Ayrıştırma Yapılandırması ile Farklar

Parse yapılandırmasıyla, Parse Config Kontrol Paneli'nde uygulamanıza anahtar/değer çiftleri ekleyebilir, ardından istemcide ParseConfig öğesini getir. Oluşturduğunuz her ParseConfig örneği get her zaman sabittir. Gelecekte yeni bir ParseConfig aldığınızda ağda yer alıyorsa mevcut ParseConfig örneklerini değil, yeni bir hesap oluşturun ve getCurrentConfig() üzerinden kullanıma sunun.

Firebase Remote Config ile anahtar/değer çiftleri için geçersiz kılabileceğiniz uygulama içi varsayılan ayarlar oluşturursunuz ve uygulamanızın ayarları ile ilgili varyasyonları sağlamak için kurallar ve koşulları kullanabilirsiniz. daha fazla kullanıcıya hitap edin. Firebase Remote Config, bir anahtar/değer çiftlerini uygulamanızda kullanılabilir hale getiren singleton sınıfını kullanın. Başlangıçta singleton geri döner uygulama içi olarak tanımladığınız varsayılan değerler. İstediğiniz zaman sunucudan yeni bir değer grubu alabilirsiniz uygulamanız için en uygun an; getirildikten sonra, yeni kümenin ne zaman etkinleştirileceğini seçebilirsiniz. uygulamanın kullanıma sunulmasını sağlayabilir.

Önerilen Taşıma Stratejisi

Parse yapılandırmanızın anahtar/değer çiftlerini kopyalayarak Firebase Remote Config platformuna geçebilirsiniz ve ardından uygulamanın Firebase Remote Config kullanan yeni bir sürümünü dağıtmanız gerekir.

Hem Parse Config hem de Firebase Remote Config ile deneme yapmak istiyorsanız Yalnızca Parse sürümünden yeterli sayıda kullanıcı geçiş yapana kadar her iki SDK'yı da kullanan yeni bir uygulama sürümü.

Kod Karşılaştırması

Ayrıştır

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");