6. Firebase
dependencies {
compile 'com.firebase:firebase-client-android:2.5.2+'
}
Firebase myFirebaseRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");
myFirebaseRef.keepSynced(true);
// write data
myFirebaseRef.child("message").setValue("Data to Firebase.");
// read data
myFirebaseRef.child("message").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.getValue());
}
@Override public void onCancelled(FirebaseError error) { }
});
7. dependencies {
compile 'com.pubnub:pubnub-android:3.7.8'
}
Pubnub pubnub = new Pubnub("demo", "demo");
pubnub.publish("my_channel", "Hello!", new Callback() {
public void successCallback(String channel, Object message) {}
public void errorCallback(String channel, Object message) {}
});
pubnub.subscribe("my_channel", new Callback() {
public void connectCallback(String channel) {}
public void disconnectCallback(String channel) {}
public void reconnectCallback(String channel) {}
public void successCallback(String channel, Object message) {}
public void errorCallback(String channel, Object message) {}
});
pubnub.unsubscribe("my_channel");
PubNub
8. Клиент Сервер
DDP / websockets / JSON
minimongo
mongo
mMeteor.subscribe(“items”, new Object[] { arg });
public void onDataAdded(...) {
// {"itemid":"1","name":"name1"}
}
public void onDataChanged(...) {}
public void onDataRemoved(...) {}
Meteor.publish("items", function () {
return Items.find({});
});
Meteor
Items {
{"itemid":"1","name":"name1"},
{"itemid":"2","name":"name2"}
}
AndroidDDP / ObjectiveDDP NodeJS
9. Протокол DDP
Distributed Data Protocol
Протокол передачи структурированных данных от сервера. Позволяет
передавать изменения данных в реальном времени. Реализация
основана на передаче JSON.
Сообщения / команды:
● Messages: connect, connected, failed
● Heartbeats: ping, pong
● Messages: sub, unsub, added, changed, ...
● RPC: method, result , updated
● Errors
11. mMeteor.subscribe(“items”, new Object[] { arg }); возвращает
курсор
Возвращается курсор на данные и можно забрать хоть Мб
mMeteor.call(“getItems”); возвращает данные
Есть ограничения на размер передаваемого результата
Map<String, Object> values = new HashMap<String, Object>();
mMeteor.insert("my-collection", values);
mMeteor.update("my-collection", query, values);
Варианты получения данных
12. mMeteor.registerAndLogin("john", "john.doe@example.com",
"password", new ResultListener() { });
mMeteor.loginWithUsername("john", "password", new ResultListener() {
});
mMeteor.loginWithEmail("john.doe@example.com", "password", new
ResultListener() { });
mMeteor.isLoggedIn();
mMeteor.logout();
Авторизация
18. • уменьшать вложенность данных лучше использовать одноуровневую
иерархию данных
• держите соединение с сервером минимальное время
• передавайте курсоры а не полные данные
• не подписывайтесь на коллекции целиком
• публикуйте части свойств объектов
• используйте подписку только для данных
Правила
19. Что использовать?
Firebase PubNub Parse Server Meteor
FREE 100 соединений в
один момент
1 Гб БД
10 Гб трафик
100 устройств
1 млн сообщений
FREE FREE (MIT)
SDK Android
iOS
70+ 12 20+
Push
Notifications
есть есть есть есть *)
Offline storage
в мобильном
SDK
есть есть есть нет
*) через сторонний модуль https://atmospherejs.com/raix/push