Anotasi
Dalam artikel ini, saya ingin berbagi kesan umum saya tentang menggunakan BaaS - solusi yang disebut Parse untuk mengembangkan backend aplikasi Android, dan untuk berbicara tentang semua "jebakan" yang harus saya hadapi selama periode pengembangan. Untuk pertama kalinya, platform ini disarankan oleh rekan kerja saya ketika saya masih junior, dan hanya ada 1 proyek komersial di belakang saya. Motivasi untuk menulis artikel ini adalah keberanian dan waktu yang saya habiskan untuk mencari versi perpustakaan yang kompatibel dan merenungkan keputusan aneh pengembang platform,
baik, atau hanya karena saya masih belum menemukan artikel tentang hal ini . Juga, saya tidak akan memberi tahu apa-apa tentang Parse dan bagaimana menghubungkan dan mengkonfigurasinya, tetapi untuk berjaga-jaga, saya akan meninggalkan semua tautan yang diperlukan agar Anda dapat membacanya.
Masalah # 1: Menggunakan Parse Server bersama dengan PostgreSQl
Penggunaan konfigurasi ini disebabkan oleh fakta bahwa server dikerahkan pada hosting VDS, dan penggunaan basis data MLab jarak jauh tidak praktis, karena pada saat pengembangan, Roskomnadzor berusaha memblokir Telegram di Rusia, dan ada masalah dengan koneksi tanpa VPN. Tidak ada waktu untuk mengkonfigurasi VPN di konsol Linux, dan proyek sudah aktif, jadi saya memutuskan untuk menggunakan database lokal di server. Saya memilih PostgreSQL karena saya memiliki pengalaman yang baik dengannya.
Peretasan nomor 1: agar database berfungsi tanpa kesalahan dalam tipe data, saat memasang postgres, Anda harus menginstal postgis. Setelah itu, Anda perlu membuat database dan segera setelah membuat buat hubungkan semua ekstensi postgis. Anda dapat membaca tentang cara menghubungkan ekstensi postgis ke database di
sini . Setelah semua ekstensi tersambung, Anda dapat menghubungkan database ke server, buka dasbor dan lihat bahwa tabel dibuat tanpa kesalahan.
Lifehack No. 2: gunakan versi server Parse> = 2.7.2. Ketika saya mengunduh proyek uji dari gita, ada versi server 2.2.5, dan semuanya tampak bekerja, tetapi kemudian bug keluar: sambil mempertahankan koordinat geolokasi, lat dan lng tempat yang berubah. Dan ada 2 kasus: jika koordinat <90 dalam nilai absolut, maka penanda pada peta hanya di tempat lain, jika tidak aplikasi akan macet, dan log bahwa Lat tidak boleh lebih dari 90 dalam nilai absolut jatuh ke konsol. Kemudian saya memulai dumbass 2 hari untuk mencari solusi. Apa yang saya tidak temukan di berbagai forum dan masalah github: membalikkan koordinat dalam fungsi Cloud (tidak berfungsi!); membalik koordinat di PostgresStorageAdapter (setelah perubahan ada banyak kesalahan, saya tidak ingin menyelidiki akhir hari kerja, mematikan komputer dan pergi). Hari berikutnya, saya melihat rilis, dan melihat bahwa dalam versi 2.7.2 bug diperbaiki di PostgresStorageAdapter. Cepat perbaiki versi dalam package.json, dan lihatlah, itu berfungsi sebagaimana mestinya. Pada titik ini, sudah ada versi 3.x.x, dan saya mencoba menggunakannya, tetapi para pengembang membuat banyak perubahan terkait dengan fungsi-Cloud, dan banyak kesalahan muncul pada saat startup. Tidak ada waktu untuk memperbaiki kode kerja, jadi versi 2.7.2 tepat untuk saya. Jika Anda baru saja memulai proyek Anda, maka tentu saja lebih baik menggunakan versi terbaru.
Masalah # 2: LiveQuery tidak berhenti berlangganan
Saya menghabiskan sedikit lebih dari satu hari untuk menyelesaikan masalah ini. Dan dia sangat aneh dan tidak terlihat.
Awalnya, arsitekturnya kira-kira seperti ini:
public class Subclass extends ParseObject {
Dan ketika Anda keluar dari layar, metode itu dipanggil, tetapi permintaan itu tidak berhenti berlangganan. Seperti yang Anda ketahui, LiveQuery berlangganan berdasarkan permintaan, dan setiap perubahan dalam data yang sesuai dengan permintaan dapat dilacak di dalam callback. Berhenti berlangganan juga terjadi atas permintaan. Objek Pelanggan dikembalikan dalam metode berlangganan, tetapi objek ini sama sekali tidak berguna, karena tidak mengandung metode "berhenti berlangganan", dan LiveQueryClient sendiri tidak mengandung metode "berhenti berlangganan" dengan parameter Pelanggan. Menghidupkan debug, saya mulai langkah demi langkah masuk ke metode yang sama "berhenti berlangganan". Klien sendiri menyimpan daftar langganan secara pribadi. Dalam metode ini, pengembang menggilir lembar ini dan membandingkan permintaan dari parameter dengan permintaan pribadi, yang disimpan dalam objek langganan dengan fungsi yang tidak ditentukan sama dengan, yang sesuai dengan == biasa, dan yang membandingkan alamat objek kompleks. Dan ini menjelaskan semuanya, karena dalam proyek saya ada kelas dengan fungsi yang menciptakan permintaan yang tepat untuk saya. Dan karena objek permintaan selalu dibuat baru, oleh karena itu, alamat permintaan berbeda, sama tidak berfungsi, dan berhenti berlangganan tidak terjadi. Saya memecahkan masalah ini sebagai berikut: apakah singleton, dan itu berhasil.
Itu terlihat seperti ini:
public class Subclass extends ParseObject {
Setelah beberapa waktu, muncul ide untuk menulis manajer saya sendiri yang akan memantau langganan, tetapi saya tidak pernah menyadarinya.
Kesimpulan
Semoga artikel ini bermanfaat. Jika Anda menemukan ketidakakuratan atau kesalahan, tulis kepada saya. Seperti yang dijanjikan, saya akan meninggalkan tautan ke beberapa sumber bagus yang membantu saya:
Semoga beruntung untuk semuanya!