Flutter: Flutter harus menyediakan abstraksi untuk eksekusi latar belakang

Dibuat pada 2 Mei 2016  ·  139Komentar  ·  Sumber: flutter/flutter

Pelanggan ingin menjalankan kode panah sebagai proses latar belakang pada iOS dan Android, untuk hal-hal seperti menyinkronkan data saat wifi tersedia tetapi aplikasi tidak terbuka, dll.

@mpcomplete membuat proses latar belakang di Android untuk mengeksekusi kode Dart untuk memperbarui flutter. Tapi saya tidak mengetahui paralel di iOS.

Masalah ini melacak pengembangan API di plugin atau lainnya. Dukungan mesin untuk abstraksi ini dilacak di https://github.com/flutter/flutter/issues/6192.

truckable wellbeing engine framework plugin new feature

Komentar yang paling membantu

Pembaruan cepat: eksekusi latar belakang untuk iOS diterapkan dan siap untuk ditinjau (PR flutter/engine#5539). Setelah itu, saya akan mulai memperbarui eksekusi latar belakang Android untuk memiliki antarmuka yang konsisten dan menerbitkan contoh plugin. Ini semua mudah- mudahan akan selesai pada akhir bulan.

Semua 139 komentar

Haruskah kode yang berjalan di latar belakang ditulis dalam Dart atau Java/Objective-C ?

Ini muncul dalam konteks ingin memperbarui model data lokal ketika konektivitas tersedia. misalnya peta kereta bawah tanah/waktu ketika Anda mungkin berjalan masuk/keluar dari kereta bawah tanah. Jadi saya pikir tujuannya adalah agar kode yang dieksekusi menjadi Dart sehingga Anda tidak harus memiliki kode manipulasi model data yang terpisah untuk setiap platform.

CC @kasperl; kami telah menjelajahi banyak cara untuk mengeksekusi kode di latar belakang di berbagai target kami, dan mungkin beberapa pembelajaran dapat diambil dari itu.

Apakah kami memiliki beberapa kasus penggunaan dari pengguna kami? Satu-satunya yang saya dengar adalah "Kami ingin menjalankan beberapa kode di perangkat, sebagai tanggapan atas pesan push. Kami ingin menyinkronkan data ke perangkat, meskipun aplikasi tidak terbuka."

Biasanya cukup terbatas apa yang sebenarnya diizinkan untuk dilakukan oleh aplikasi di latar belakang, jadi dalam hal ini saya pikir kita bisa mendapatkan inspirasi untuk kasus penggunaan dari sana. Misalnya, berikut adalah model iOS:
https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

Saya yakin ini adalah bug yang sama dengan #6192, ya.

Menambahkan tag berdaun dan nilai tonggak dari #6192

@mravn-google @sigurdm sesuatu untuk dipikirkan!

Menugaskan ke Mikkel untuk penyelidikan awal untuk lebih memahami kelayakan dan biaya.

Berikut pembaruan dari Leafy:

Karena keterbatasan pemberitahuan data (yaitu pemberitahuan yang memerlukan aplikasi untuk merespons dalam beberapa cara), berdaun condong ke arah menggunakan pemberitahuan tampilan (yaitu pemberitahuan yang didorong langsung ke layar pengguna tanpa keterlibatan aplikasi). Dukungan untuk ini sudah ada di Flutter.

Namun, selama percakapan dengan tim lain, kasus penggunaan lain telah muncul: Jika Anda ingin mendukung perangkat yang dapat dikenakan atau widget [layar utama] dari aplikasi Anda, Anda perlu menulis UI dalam kode asli karena permukaan ini belum didukung oleh Flutter. Namun, alangkah baiknya jika dapat "membangunkan aplikasi dan meminta data" sehingga lapisan model dan logika bisnis dapat dibagikan ke seluruh aplikasi flutter dan aplikasi perangkat yang dapat dikenakan. Karena belum pernah menulis salah satu dari ini, saya tidak yakin bagaimana aplikasi asli yang ada melakukan ini, tetapi ini jelas merupakan kasus penggunaan yang valid untuk tugas latar belakang.

Baru saja berbicara dengan penulis Flutter talk untuk Berlin DroidCon, dan ini adalah salah satu pertanyaan teratasnya. "Bagaimana melakukan ini, cara Flutter"

Untuk lebih jelasnya, saat ini dimungkinkan untuk menulis proses latar belakang sebagai bagian dari Aplikasi yang menggunakan Flutter. Namun proses tersebut hanya dapat mengeksekusi kode Obj-C/Swift atau Java/Kotlin. Bug ini adalah tentang memperbaiki batasan di mesin kami untuk memungkinkan mengeksekusi kode Dart dalam proses latar belakang ini, serta mungkin menyediakan abstraksi untuk memungkinkan penjadwalan pekerjaan latar belakang seperti itu dari Dart (kemungkinan yang termasuk dalam plugin setelah FlutterView-perlu-untuk- pembatasan di layar dihapus).

https://github.com/flutter/flutter/issues/6192#issuecomment -258928555 membahas batasan mesin saat ini dan niat kami untuk menyelesaikannya. FYI @a-siva

Ini juga terkait dengan (duplikat dari?) https://github.com/flutter/flutter/issues/5048.

Kami memiliki kasus penggunaan yang saya tidak lihat disebutkan: Kami melacak lokasi setiap 5 detik, dan memiliki informasi tertentu lainnya yang dilampirkan ke peristiwa itu, yang semuanya logika bisnis diimplementasikan di Dart. Jika pengguna kami membawa aktivitas lain ke latar depan, kami perlu menampilkan pemberitahuan terus-menerus dan terus menjalankan kode Dart itu setiap 5 detik.

Ini adalah penghalang bagi kami. Saya tertarik untuk mendengar solusi apa pun yang dapat kami terapkan saat ini, karena ini akan menunda pengiriman.

Saya akan mencoba membiarkan timer aktif dan melihat apa yang terjadi. Saya tidak berpikir itu akan dapat diandalkan tetapi aplikasi kami juga memiliki kasus penggunaan pembersihan cache satu kali (15 menit setelah aplikasi diletakkan ke latar belakang) dan kami telah melihatnya berhasil dijalankan. Kami menjadwalkannya saat aplikasi dihentikan di Dart. Sesuatu seperti ini:

<strong i="6">@override</strong>
void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.paused) {
        new Future.delayed(const Duration(seconds: 5), () => _doSomething());
    }
}

Ini tidak akan berhasil jika:

  • Aplikasi secara eksplisit dimatikan oleh pengguna (misalnya dari pengalih tugas).
  • Aplikasi dimatikan oleh OS karena tekanan memori.
  • Di iOS? Saya rasa kami belum mencobanya, jadi silakan coba dan laporkan kembali.

Saya tidak yakin dengan rekan-rekan iOS, tetapi di Android, plugin flutter dapat dibuat yang meluncurkan layanan latar depan, yang memberikan proses prioritas yang lebih tinggi dan membuatnya lebih kecil kemungkinannya untuk dimatikan selama waktu yang menuntut sumber daya. Apakah ini juga akan memberikan kesempatan yang lebih baik untuk bertahan hidup dengan timer Dart yang berjalan lama?

Ya, itu mungkin membantu karena aktivitas Anda (dengan demikian tampilan flutter Anda) akan tetap aktif. Saya masih belum yakin bahwa kami memiliki cukup kejelasan untuk membuat plugin.

Jika intinya adalah untuk mendukung polling informasi latar belakang secara berkala, mungkin lebih baik untuk merancang sebuah plugin hanya untuk itu. Seharusnya memungkinkan mendaftarkan panggilan balik di Dart yang dipanggil melalui timer dalam kode asli daripada mengimplementasikan Timer di Dart. Kita bisa melakukannya dengan layanan di Android.

ATAU

Kami hanya memiliki HowTo untuk membuat aplikasi KeepAlive™ Flutter.

Di iOS, Anda dapat mengatur UIBackgroundMode di Info.plist Anda untuk memperkecil kemungkinan aplikasi dimatikan.

Di Android, siapkan layanan kosong. Ini sebagian besar perubahan AndroidManifest.xml + implementasi kelas layanan sepele.

Plugin KeepAlive generik tampaknya tidak dapat diterapkan karena masih memerlukan pengaturan manual di iOS dan tidak jelas apakah akan menggunakan layanan latar depan/latar belakang di Android (layanan latar depan lebih sulit untuk dimatikan tetapi memerlukan pemberitahuan terus-menerus).

Bahkan dengan layanan latar depan, OS masih dapat mematikan proses kami karena alasan apa pun.

Saya merasa solusi ideal harus menggunakan Pengelola Alarm Android, yang ditujukan untuk kasus di mana Anda ingin kode aplikasi Anda berjalan pada waktu tertentu, bahkan jika aplikasi Anda sedang tidak berjalan. Tetapi bahkan dengan ini, bagaimana kita bisa me-reboot proses Dart dengan status yang sama, karena kita akan memiliki pengguna Firebase yang login membuat penulisan database yang diautentikasi?

@pauldemarco maka bug ini... Tidak ada cara bagi Flutter saat ini untuk mengeksekusi kode Dart dalam keadaan apa pun tanpa FlutterView berjalan. Ini termasuk Alarm Manager, Wearable/Native Widget Data Sync, atau Push Notifications (meskipun kasus penggunaan untuk yang terakhir perlahan-lahan akan hilang https://github.com/flutter/flutter/issues/6192).

Saya pikir masalah _same state_ harus diselesaikan di level aplikasi bukan di level Flutter. Untuk aplikasi asli Anda memiliki masalah yang sama. Setelah proses mati, Anda tidak dapat memulihkan status kecuali Anda menyimpannya di suatu tempat (preferensi bersama atau sqlite misalnya). Agaknya Anda akan melakukan hal yang sama dalam kode Dart Anda. Satu hal yang dapat dilakukan Flutter adalah mengomunikasikan pesan seperti applicationWillTerminate di iOS dan onSaveInstanceState di Android sehingga Anda dapat mempersiapkan diri untuk ini.

Pertanyaan:

  • Apa model iOS dan Android untuk eksekusi latar belakang?

    • Sinyal apa yang dapat memicu aplikasi untuk berjalan?

    • Berapa lama Anda harus berlari? Bagaimana Anda tahu kapan itu habis?

  • Model eksekusi apa yang kita inginkan untuk eksekusi latar belakang? (misalnya isolat terpisah? Gunakan dart utama: ui thread?)
  • Apakah kita ingin mendukung kode yang berjalan tanpa aplikasi (seperti pada runApp ) yang dijalankan pertama kali?
  • Bisakah kami mengumpulkan daftar kasus penggunaan kanonik?

Saat ini hal ini tidak direncanakan dalam waktu dekat. Ini adalah proses yang besar, kami perlu memindahkan sesuatu yang lain dari daftar prioritas jangka pendek kami untuk segera melakukannya.

Gunakan kasus
Kami memiliki mode operasi berbeda yang merekam peristiwa pada interval berbeda (5 detik, 10 menit, 30 menit, 6 jam). Kami membutuhkan cara untuk memastikan proses logging berjalan baik saat aplikasi sedang berjalan atau tidak.

Sinyal apa yang dapat memicu aplikasi untuk berjalan?

Di Android, ini akan melalui PendingIntent yang dikirim dari Alarm terjadwal di AlarmManager.
Saya tidak yakin dengan rekan iOS untuk saat ini.

Berapa lama Anda harus berlari? Bagaimana Anda tahu kapan itu habis?

Pertama-tama kita harus mengumpulkan informasi yang diperlukan untuk acara tersebut, beberapa di antaranya adalah async (Lokasi GPS), kemudian merekam acara tersebut di datastore online (Firebase). Seluruh proses ini dapat berlangsung hingga 30 detik.

Model eksekusi apa yang kita inginkan untuk eksekusi latar belakang? (misalnya isolat terpisah? Gunakan dart utama: ui thread?)

Saya tidak berpikir ini penting bagi kami, kami tidak akan melakukan perhitungan yang mahal.

Apakah kita ingin mendukung kode yang berjalan tanpa aplikasi (seperti pada runApp) yang dijalankan pertama kali?

Saya tidak yakin dengan implikasinya di sini. Saya kira karena kami menginisialisasi logika dan status bisnis kami di aplikasi normal, akan lebih baik untuk menjalankannya terlebih dahulu, sehingga kami dapat menggunakan pelaporan kerusakan, dll.

Saya dapat menambahkan kasus pengguna lain, fungsi ini adalah satu-satunya hal yang mencegah saya menyelesaikan aplikasi saya. Saya memiliki aplikasi Android untuk ini dan memutuskan untuk membuat versi yang lebih baru dan lebih baik yang idealnya juga berfungsi di iOS. Saya tidak terbiasa dengan komponen di iOS (ketika meneliti saya menemukan bahwa tugas latar belakang di iOS jauh lebih terbatas daripada di Android) tetapi saya dapat menyebutkan komponen Android yang saya gunakan.

Sinyal apa yang dapat memicu aplikasi untuk berjalan?

Sebagian besar kode juga dipicu oleh Alarm di AlarmManager.

Namun, untuk memulai alarm itu sepanjang waktu beberapa kode dijalankan pada boot perangkat dan juga pada peningkatan paket (android.intent.action.MY_PACKAGE_REPLACED) karena alarm sebelumnya akan dihapus.

Berapa lama Anda harus berlari? Bagaimana Anda tahu kapan itu habis?

Idealnya kurang dari satu detik. Permintaan jaringan kecil dibuat dan hasilnya tetap ada, dalam beberapa kasus pemberitahuan ditampilkan. Setelah itu metode kembali.

Model eksekusi apa yang kita inginkan untuk eksekusi latar belakang? (misalnya isolat terpisah? Gunakan dart utama: ui thread?)

Tidak masalah bagi saya juga.

Apakah kita ingin mendukung kode yang berjalan tanpa aplikasi (seperti pada runApp) yang dijalankan pertama kali?

Dalam kasus saya setelah menjalankan sekali akan baik-baik saja, namun jika sesuatu seperti penerima boot dimungkinkan, itu harus berjalan bahkan jika aplikasi tidak dimulai sebelumnya.

https://stackoverflow.com/questions/41924890/how-do-i-run-code-in-the-background-even-with-the-screen-off adalah pertanyaan stack overflow Flutter yang paling banyak dilihat sejauh yang saya bisa memberi tahu. :) Sepertinya ada minat di ruang ini.

https://github.com/flutter/flutter/issues/6192 telah diaktifkan kembali untuk memberikan dukungan mendasar untuk benar-benar menjalankan kode Dart saat FlutterView tidak dirender.

Ini ada dalam radar jangka pendek kami, tetapi setidaknya akan beberapa bulan.

Maaf membatalkan penetapan @zanderso dari bug ini, saya bermaksud menugaskannya ke bug eksekusi latar belakang yang mendasarinya (#6192)

CC @kasperl; kami telah menjelajahi banyak cara untuk mengeksekusi kode di latar belakang di berbagai target kami, dan mungkin beberapa pembelajaran dapat diambil dari itu.

@mit-mit apakah Anda mendokumentasikan temuan Anda dalam beberapa bentuk atau bentuk?

Alasan lain untuk menginginkan pemrosesan latar belakang adalah jika Anda ingin membuat aplikasi Streaming Audio. Pengguna membuka aplikasi untuk memulai streaming audio. Proses latar belakang mengunduh aliran dan memutar akhir audio menerima acara untuk memulai/berhenti/jeda/ff/mundur akhir mengirim acara untuk mengubah UI misalnya data meta audio seekbar ke ui. Anda memerlukan proses latar belakang ketika pengguna meninggalkan aplikasi Anda, pengunduhan/pemutaran streaming perlu dilanjutkan

Kami sedang mengerjakan ini. Tidak ada ETA saat ini.

@zanderso memposting pembaruan di sini: https://github.com/flutter/flutter/issues/6192#issuecomment -342214725

@a-siva memberi tahu saya bahwa ini masih berlangsung; Android aktif dan berjalan dan kami sedang mengerjakan iOS sekarang.

Kami memiliki kasus penggunaan untuk ini di mana kami ingin melacak lokasi pengguna di latar belakang untuk mendaftarkan apakah mereka pergi ke lokasi tertentu pada waktu tertentu atau tidak (yaitu selama acara).

@bjornbjorn tidak bisakah Anda menggunakan pagar geo untuk itu? tidak tahu apakah iOS memiliki sesuatu yang serupa tetapi Anda dapat mencapai Geofencing Layanan Play ini

apakah ada berita @Hixie ? Saat ini saya berada dalam tahap di mana saya membutuhkan aplikasi saya untuk berjalan sebagai layanan latar belakang (sebagian besar aplikasi ditulis dalam Go) tetapi akhirnya dimatikan. Saya mulai mengimplementasikan layanan latar depan di sisi Java tetapi akan menjadi sangat buruk jika saya akhirnya harus mengimplementasikannya kembali untuk iOS.

Beberapa memperkirakan apakah ini akan tersedia untuk android di minggu depan atau bulan depan akan sangat dihargai :)

@rusenask seperti yang dijelaskan di https://github.com/flutter/flutter/issues/6192 , kami sekarang memiliki plugin untuk ini di Android! Silakan lihat https://pub.dartlang.org/packages/android_alarm_manager , dan beri tahu kami jika itu memenuhi kebutuhan Anda.

Kelihatannya menjanjikan dan saya mungkin bisa mengubah aplikasi saya dari gaya "daemon" menjadi lebih seperti "ledakan berkala" dengan manajer alarm itu. Untuk bangun, konsumsi berita apa pun dan matikan.

Namun, idealnya saya akan menggunakan sesuatu yang memungkinkan proses saya untuk selalu berjalan di latar depan. https://stackoverflow.com/questions/15758980/android-service-needs-to-run-always-never-pause-or-stop . Singkatnya, aplikasi saya menjalankan bot sehingga hampir selalu perlu dijalankan.

Kami perlu memastikan bahwa kami telah mendokumentasikan ini sebelum kami menganggap ini selesai.

Haruskah kita membuka masalah dokumentasi baru?

@zanderso -- @mjohnsullivan adalah kontak terbaik untuk sisi dokumentasi.

Apakah ETA diketahui?

@it2bz ETA untuk apa sebenarnya? Dukungan di Android? Dokumentasi? Dukungan di iOS? Contohnya?

Dukungan @Hixie di Android dan iOS dan setidaknya dokumentasi dasar dengan contoh

Untuk iOS, dapatkah Anda menguraikan dengan tepat apa yang Anda inginkan? Apple memiliki batasan ketat tentang apa yang dapat dilakukan aplikasi di latar belakang, jadi akan berguna bagi kami untuk mengetahui dengan tepat API mana yang Anda ingin kami kaitkan.

Saya mencari pekerjaan latar belakang peluang dengan lokasi pengguna

Sepertinya ini adalah utas 'tanyakan hal-hal latar belakang' jadi saya akan mulai. Saya ingin mengimplementasikan pemutar musik menggunakan flutter tetapi saya tidak yakin apakah itu mungkin (dari segi API) untuk membuat musik tetap diputar meskipun aplikasi diperkecil di telepon. Saya tahu bahwa di Android Anda dapat memulai layanan yang sebenarnya dapat dilanjutkan meskipun aplikasi ditutup. Itu kemudian akan meluncurkan kembali aktivitas jika diperlukan. Apakah hal serupa mungkin terjadi pada flutter sekarang?

@SirWindfield Taruhan terbaik Anda adalah menggunakan API pemutar media asli setiap platform, yang akan terus diputar secara terpisah dari aplikasi.

@kirbyfan64 Saya pikir begitu, terima kasih!

@Hixie , solusi seperti ini (Cordova): https://github.com/katzer/cordova-plugin-background-mode , atau seperti ini (Swift): https://github.com/yarodevuci/backgroundTask akan menyenangkan untuk tugas latar belakang Flutter.

@holospeed Itu adalah pendekatan yang kemungkinan besar tidak akan dikirimkan oleh Apple, jadi saya kira kami tidak ingin menghabiskan waktu untuk mengimplementasikannya sendiri. Ini tentu saja sesuatu yang kami sambut untuk Anda terapkan sebagai paket kontribusi komunitas di pub, jika Anda peduli dengan aplikasi pribadi di iOS.

Mungkin solusinya adalah membuat plugin latar belakang tertentu seperti plugin untuk pemutaran audio di latar belakang, dan plugin untuk GPS/Lokasi di latar belakang dll. daripada mencoba membuat mekanisme latar belakang abstrak yang perlu mendukung semuanya.

Apakah mungkin menjalankan penghitung waktu di latar belakang yang membawa aplikasi ke
latar depan pada waktu tertentu?

Pada Rabu, 21 Mar 2018 pukul 08:49, Dylan Drost [email protected] menulis:

Mungkin solusinya adalah membuat plugin latar belakang tertentu seperti a
plugin untuk pemutaran audio di latar belakang, dan plugin untuk GPS/Location
di latar belakang dll. alih-alih mencoba membuat latar belakang abstrak
mekanisme yang perlu mendukung semuanya.


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/flutter/flutter/issues/3671#issuecomment-374867947 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AK-c-E0KdEkvbH5uCBIM8FaAbYQkSU2tks5tghQWgaJpZM4IVsUk
.

@iBob101 Saya yakin ini mungkin jika Anda menggunakan plugin android_alarm_manager dalam kombinasi dengan plugin android_intent .

Dalam kasus penggunaan saya, Semua tugas latar belakang yang saya butuhkan adalah memutar audio di latar belakang pada waktu tertentu, jadi menurut saya saran @aegis123 sangat bagus, kami dapat memulai dari yang kecil dan dengan waktu menyediakan mekanisme yang mendukung proses latar belakang apa pun

Saya juga membutuhkan ini untuk memutar musik di latar belakang.

Saya telah melihat bagaimana ini dilakukan di plugin android_alarm_manager dan dari apa yang dapat saya kumpulkan, kode Dart dipanggil di Android dengan memanggil runFromBundle . Fungsi Dart yang dipanggil ditentukan oleh titik masuk, namun bagaimana jika fungsi itu membutuhkan informasi untuk diteruskan? Contoh kasus penggunaan adalah aplikasi obrolan yang memungkinkan balasan langsung melalui pemberitahuan. Sesuai tautan ini , pemberitahuan akan mengizinkan input jarak jauh tetapi sepertinya tidak mungkin meneruskan teks yang telah dibaca ke fungsi Dart sehingga dapat diproses sehingga balasan dapat dikirim.

Contoh lain adalah aplikasi email yang menunjukkan pemberitahuan ketika email baru telah diterima, tindakan yang dapat disajikan salah satunya adalah kemampuan untuk mengarsipkan email, yang dilakukan oleh fungsi Dart. Namun, fungsi itu perlu mengetahui email mana yang perlu diarsipkan.

@MaikuB Anda dapat membuat PR untuk memungkinkan kamus diedarkan yang dapat menampung pasangan nilai kunci.

Namun secara umum, untuk contoh penggunaan saya, saya memerlukan sesuatu yang mirip dengan komponen Layanan Android. Dan karena flutter tidak dirancang untuk memiliki setiap API yang tersedia yang dapat disediakan oleh setiap OS, mungkin ide yang lebih baik untuk menulis aplikasi dalam kotlin/java oder swift.

Saya yakin @bkonyi saat ini sedang mencari apa yang bisa kami lakukan di iOS untuk masalah ini.

Ini berarti kami tidak dapat memiliki layanan latar belakang dengan Flutter? Misalnya: Layanan untuk memunculkan pemberitahuan push dari server.

@s-bauer Selalu berjalan bukanlah hal untuk Android, kecuali mungkin pemberitahuan latar depan, tetapi saya tidak menemukan penyebutan startForeground pada kode Anda.

Saya tidak yakin apa spesifikasi Anda, tetapi ingat bahwa ponsel Android akan tertidur lelap setelah beberapa jam dengan layar mati dan tidak dipindahkan. Semua layanan (kecuali latar depan) akan dijadwalkan namun menurut sistem operasi itu yang terbaik. Pemberitahuan push yang datang dari FCM atau alarm yang datang dari AlarmManager di bawah pengaturan tertentu mungkin adalah satu-satunya 2 hal di bawah kendali pengembang yang mampu membangunkan perangkat / aplikasi android kapan pun pengembang menginginkannya, tetapi tidak untuk jumlah yang tidak terbatas waktu. Ada banyak metode lain yang bergantung pada apa pun yang menurut sistem operasi terbaik untuk baterai. Lihat tentang mode tidur untuk lebih jelasnya. https://developer.android.com/training/monitoring-device-state/doze-standby

Pada iPhone hal-hal jauh lebih terbatas.

Saya juga tidak mengerti mengapa layanan atau koneksi harus tetap hidup untuk menerima pemberitahuan push dari FCM atau APNS, mungkin saya melewatkan sesuatu?

Pembaruan cepat: eksekusi latar belakang untuk iOS diterapkan dan siap untuk ditinjau (PR flutter/engine#5539). Setelah itu, saya akan mulai memperbarui eksekusi latar belakang Android untuk memiliki antarmuka yang konsisten dan menerbitkan contoh plugin. Ini semua mudah- mudahan akan selesai pada akhir bulan.

@bkonyi apakah ini juga akan menyelesaikan masalah dengan: https://github.com/flutter/flutter/issues/17566 ?

@piotrpalek , ya akan, meskipun perilaku kemungkinan akan sedikit berbeda dari sebelumnya karena kami tidak dapat lagi membagikan isolat UI untuk panggilan balik karena berbagai alasan. Komunikasi apa pun dengan UI latar depan harus dibuat melalui port yang terisolasi, MethodChannel s, atau metode lain apa pun yang tidak bergantung pada berbagi memori dengan isolat utama.

Pembaruan status: perubahan eksekusi latar belakang iOS dan Android siap untuk ditinjau dan masih terus diulang. Saya berharap perubahan iOS pada flutter/engine#5539 akan mendarat dalam beberapa hari mendatang, tidak ada permintaan untuk modifikasi besar, dan perubahan Android pada flutter/engine#5640 diharapkan dapat dilakukan minggu depan setelah berurusan dengan komentar dari tinjauan. Terima kasih atas kesabaran Anda!

Luar biasa. Ya, saya telah melihat PR karena keduanya merujuk masalah ini. Anda menyebutkan melakukan contoh plugin dan saya telah melihat yang iOS, apakah akan ada contoh Android? Saya kira plugin pengelola alarm Android dapat diperbarui setelah perubahan masuk

@MaikuB , ya, plugin AlarmManager akan diperbarui setelah flutter/engine#5640 mendarat dan flutter/plugins#642 selesai.

Halo. Adakah pembaruan tentang topik ini? Penyelesaian tertunda ke pencapaian bucket7. Apakah itu benar-benar akan mendarat di sana? Ini adalah fungsi penting untuk proyek kami. Terima kasih atas tanggapan apa pun.

Sayangnya saya harus mengubah prioritas selama beberapa hari, tetapi saya kembali mengerjakan ini sekarang. Kami _hampir_ sampai, jadi terima kasih telah bersabar!

Sekarang setelah flutter/engine#5539, flutter/engine#5947, dan flutter/engine#5954 telah mendarat, semua fungsi yang diperlukan untuk eksekusi latar belakang di Android dan iOS diimplementasikan di mesin dan harus membuatnya menjadi repositori Flutter utama selama berikutnya gulungan mesin. Dokumentasi dan contoh sedang dikerjakan, dan perbaikan plugin android_alarm_manager siap untuk ditinjau (flutter/plugins#642).

@bkonyi apakah android_alarm_manager juga akan berfungsi di IO sekarang?

@ianldgs , sayangnya tidak. iOS tidak menyediakan mekanisme apa pun untuk mengeksekusi kode secara berkala sehingga kemungkinan tidak mungkin untuk membuat implementasi iOS (lihat posting SO ini). Seringkali dimungkinkan untuk mencapai tujuan yang sama menggunakan salah satu mode eksekusi latar belakang terbatas (misalnya, perubahan lokasi yang signifikan, pemberitahuan push, perubahan status Bluetooth, dll).

@bkonyi , apakah ini akan memperbaiki masalah yang saat ini kami alami dengan tidak dapat menjalankan tugas latar belakang asli untuk waktu yang lama (3 menit) di iOS?

Untuk memperjelas, inilah masalah kami saat ini ...

Latar belakang:
Aplikasi kami menggunakan suar Bluetooth untuk menentukan berapa banyak waktu yang dihabiskan seseorang di suatu lokasi. Kami telah menulis semua kode suar kami secara asli di AppDelegate.swift.

Masalah:
Flutter tampaknya mematikan aplikasi kita setelah beberapa detik saat kita mengeksekusi kode asli di latar belakang setelah dibangunkan oleh peristiwa lokasi (dalam hal ini masuk/keluar wilayah) meskipun kita memperpanjang waktu eksekusi latar belakang kita.

Mengapa menurut kami ini terkait Flutter:
Kami telah menguji kode suar asli kami dengan aplikasi iOS asli dan tidak memiliki masalah untuk secara konsisten mendapatkan 180 detik waktu eksekusi latar belakang.

Apa yang telah kami coba:
Satu-satunya solusi yang berhasil kami lakukan adalah dengan menunda 30 detik di main() sebelum runApp() saat aplikasi kami diluncurkan di latar belakang. Namun, ini telah menyebabkan masalah lain.

Maaf, untuk penjelasan yang panjang, tetapi ini adalah masalah besar bagi kami dan kami mencoba untuk merilisnya dalam beberapa minggu ke depan.

Kami sangat berharap perbaikan ini akan memperbaiki masalah kami juga.

Terakhir, untuk memperjelas, kami tidak terlalu peduli dengan mengeksekusi kode dart di latar belakang. Sebaliknya, perhatian utama kami adalah agar Flutter tidak menghentikan aplikasi kami secara prematur saat dibangunkan di latar belakang.

Bantuan apa pun akan sangat dihargai.

Terima kasih!

@AndrewPetrovics sayangnya saya tidak berpikir ini akan memperbaiki masalah yang Anda lihat karena perubahan ini terutama untuk memungkinkan menjalankan kode Dart dari latar belakang. Saya tidak terlalu paham dengan kebijakan eksekusi latar belakang iOS, tetapi saya sebenarnya sedang mengerjakan plugin geofencing untuk Android + iOS yang terdengar mirip dengan kasus penggunaan Anda, jadi saya akan mengawasi masalah yang Anda alami sekali Saya memulai bagian iOS hari ini/besok.

@chinmaygarde , apakah Anda mengetahui sesuatu tentang masalah yang dialami @AndrewPetrovics ? Mungkin ini layak untuk mengajukan masalah baru.

@bkonyi , kedengarannya bagus. Kami akhirnya menemukan solusi untuk saat ini, tetapi ini sangat rumit. Saya akan membuat masalah terpisah ketika saya mendapat kesempatan.

Terima kasih!

@bkonyi Bolehkah saya bertanya, kapan android_alarm_manager 0.2.0 akan disebarkan secara publik ke pub.dartlang.org?

@ethael itu harus tersedia sekarang, hanya menunggu untuk mendapatkan izin untuk menerbitkan pembaruan.

Apakah ada contoh atau dokumentasi tentang ini yang tersedia?
Terima kasih!

@Solban ada dua contoh di repositori flutter/plugins:

Saya juga punya plugin geofencing dalam karya yang memiliki dukungan Android (Kotlin) dan iOS (Obj-C), tapi saya tidak yakin apakah itu akan hidup di flutter/plugin atau tidak.

Berikut beberapa dokumentasi yang berguna untuk fungsionalitas terkait eksekusi latar belakang:

  • Kelas PluginUtilities untuk meneruskan panggilan balik antar isolat
  • IsolateNameServer yang berguna untuk mendaftarkan objek SendPort dengan Flutter untuk pencarian isolat lain (ini tampaknya tidak memiliki dokumentasi aktual, tetapi antarmuka agak lurus ke depan).
  • FlutterNativeView yang digunakan untuk menelurkan isolat latar belakang untuk plugin di Android
  • FlutterHeadlessDartRunner yang digunakan untuk menelurkan isolat latar belakang untuk plugin di iOS

Saat ini tidak ada dokumentasi formal tentang penulisan plugin dengan kemampuan eksekusi latar belakang. Namun, akan ada postingan Medium di blog Flutter yang muncul dalam beberapa minggu mendatang yang akan membahas proses perancangan, penerapan, dan penggunaan plugin yang memanfaatkan eksekusi latar belakang.

Apakah ada solusi untuk melanjutkan pekerjaan latar belakang? Satu-satunya cara yang benar untuk terus mengeksekusi beberapa kode yang berjalan lama di Android adalah Foreground service .
Contoh kasus penggunaan akan melanjutkan pelacakan lokasi GPS.

@audkar saat ini tidak ada plugin yang dapat menangani pekerjaan latar belakang yang berkelanjutan, tetapi itu tidak berarti itu tidak dapat dilakukan. Sebuah plugin yang memanfaatkan fungsionalitas yang saya rujuk di atas dalam kombinasi dengan layanan latar depan (bukan JobIntentService yang saya gunakan untuk plugin geofencing) akan berfungsi dengan baik.

Saat ini saya sedang mem-porting iOS / Android Background Geolocation / Geofencing SDK ke Flutter. Ini akan disebut flutter_background_geolocation .

Saya memiliki pengalaman sekitar 5 hari dengan Dart / Flutter tetapi saya mengerti. Itu akan siap dalam 2 minggu (meskipun dokumen akan memakan waktu lebih lama dengan contoh khusus Dart).

SDK ini hampir berusia 5 tahun dan didukung penuh waktu. Ini pada awalnya dikembangkan untuk Apache Cordova , kemudian porting ke React Native dan NativeScript . Ini bekerja di aplikasi asli murni juga. Di bawah tenda, itu adalah inti Obj-c + Java library yang sama yang digunakan dengan setiap platform pengembangan.

SDK awalnya dikembangkan untuk melacak responden pertama di zona bencana (misalnya: angin topan, gempa bumi) di lingkungan di mana jaringan seluler kemungkinan besar hancur. Itu harus terus melacak bahkan jika aplikasi dihentikan atau perangkat di-boot ulang. Plugin ini berisi database SQLite dan layanan HTTPnya sendiri untuk mengunggah lokasi secara otomatis ke server Anda. Ini sangat penting untuk Android dalam kasus di mana aplikasi telah dihentikan, hanya menyisakan layanan latar depan SDK yang berjalan "tanpa kepala".

:warning: SDK ini tidak dirancang untuk aplikasi sosial. itu dirancang khusus untuk kasus penggunaan "pelacakan armada" (misalnya: taksi, layanan pengiriman, tanggap darurat, jogging, dll).

Berikut video demo singkatnya.

Lihat Filosofi Operasi .

Sunting Saya juga akan mem-porting perpustakaan lain sebagai flutter_background_fetch , yang akan dimasukkan sebagai ketergantungan flutter_background_geolocation . Modul ini akan membangunkan aplikasi iOS / Android di latar belakang setiap 15 menit, memberikan waktu latar belakang selama 30 detik bagi Anda untuk melakukan pekerjaan berkala. Lihat versi react-native untuk informasi lebih lanjut.

Oke, saya telah menerbitkan flutter_background_geolocation . Mungkin masih ada beberapa lubang untuk plugin di fasad ke lib asli dan contoh di dokumen perlu diterjemahkan dari versi React Native.

@christokrasi kabar baik. bagaimana dengan pengambilan latar belakang? ada perkiraan tentang yang itu?

@ethael Fetch akan datang sekitar 2 minggu lagi. Ini adalah plugin yang sangat sederhana.

@bkonyi Saya mencoba plugin perubahan lokasi Anda untuk bereksperimen dengan eksekusi latar belakang. Tampaknya panggilan balik dart yang dieksekusi dari pelari tanpa kepala tidak dapat menggunakan plugin lain, gagal dengan MissingPluginException .

Di Android, dengan plugin android_alarm_manager Anda memecahkan masalah ini dengan AlarmService.setPluginRegistrant(this); untuk mendaftarkan plugin secara internal dari layanan latar belakang. Tapi saya tidak melihat bagaimana mencapai yang setara untuk iOS.

Apakah saat ini mungkin untuk memanggil plugin lain dari pelari tanpa kepala di iOS? Jika demikian, bagaimana kita bisa mendaftarkan plugin dalam konteks itu?

@bkonyi Masalah ini tidak terselesaikan dan harus dibuka kembali. AlarmManager sepertinya merupakan solusi terbaik karena hanya mendukung acara berjangka waktu. Flutter membutuhkan sesuatu yang lebih umum, sehingga Anda dapat mendengarkan acara tertentu seperti perangkat Bluetooth dalam jangkauan, misalnya. Dan itu perlu mendukung iOS dengan lebih baik. Saya mengerti bahwa iOS jauh lebih membatasi, tetapi Flutter harus mendukung hal-hal yang tersedia untuk programmer asli.

Saya bersemangat untuk memulai dengan Flutter, tetapi sepertinya ada banyak masalah seperti ini yang membuatnya tidak dapat digunakan untuk semua aplikasi kecuali yang lebih sederhana. Saya mengharapkan lebih dari Google, dan menurut saya tidak adil bagi mereka untuk mengharapkan pengembang membuat plugin untuk mengisi celah besar yang mereka tinggalkan.

@dude8604 Google tidak akan menyediakan semuanya dan ya terserah pengembang plugin pihak ketiga (seperti saya) untuk menyumbangkan plugin ke ekosistem. Saya sendiri saat ini membawa dua.

Saya telah menghabiskan banyak waktu dengan Cordova, React Native dan NativeScript. Setelah 2 minggu dengan Flutter, saya pikir itu cukup bagus, meskipun pasti ada lubang (komponen Peta lintas platform, misalnya, yang saya yakin akan saya sumbangkan dalam waktu dekat.)

Saya seorang pengembang plugin profesional yang berspesialisasi dalam operasi latar belakang iOS dan Android (khususnya geolokasi & geofencing) selama 5 tahun terakhir. Apa yang Anda ingin tahu?

@christocracy Saya setuju bahwa perlu ada plugin pihak ketiga, tetapi eksekusi latar belakang atau setidaknya dapat mendaftarkan fungsi panggilan balik untuk acara tertentu sepertinya sesuatu yang harus disediakan oleh kerangka kerja aplikasi. Masalah saya bukan karena harus membuat plugin untuk memperluas fungsionalitas inti, tetapi dengan merilis kerangka kerja yang kehilangan fitur dasar dan mengharapkan pengembang untuk merelakan waktu mereka ke perusahaan nirlaba untuk mengisi kekosongan. Lagi pula, ini bukan tempat yang tepat untuk membahas ini.

Saya ingin menjalankan layanan latar belakang dan membaca peristiwa tertentu, memproses dan mungkin merekam data, dan jika perlu membuat pemberitahuan yang akan meluncurkan aplikasi utama jika ditekan. Beberapa contoh kejadiannya adalah: perangkat Bluetooth baru dalam jangkauan, data masuk pada soket, data masuk dari perangkat USB, SMS diterima, lokasi GPS berubah, upaya koneksi perangkat Bluetooth, tombol fisik tertentu ditekan, data akselerometer melebihi nilai yang ditentukan, jika aplikasi utama dihentikan, dan banyak hal lain yang tidak saya pikirkan. Jika seseorang dapat membuat plugin yang komprehensif (dengan lisensi sumber terbuka atau gratis) untuk ini yang berfungsi di iOS dan Android, saya pikir masalah ini dapat diselesaikan. Dan saya akan sangat bersyukur bahwa saya dapat mulai berkembang dengan Flutter.

@ dude8604 Saya pikir saya tahu apa yang Anda inginkan. Untuk melakukan banyak hal ini jelas membutuhkan layanan latar depan, dengan pemberitahuan terus-menerus yang diperlukan. Pengguna mengetahui layanan Anda yang sedang berjalan.

Hubungi saya melalui profil github saya.

Pertimbangkan bahwa React Native pada dasarnya seperti "Anda mendapatkan tombol, bidang teks, dan tampilan daftar, sisanya terserah Anda" dan itu tumbuh menjadi seperti sekarang karena komunitas. Google tidak mungkin menangani semua implementasi dan itu gila untuk berpikir bahwa tim Flutter akan dapat mereplikasi semua fungsi yang disediakan oleh Android dan iOS ketika fungsi tersebut ditambahkan oleh tim 100x (10.000x?) ukuran Flutter.

android_alarm_manager dan image_picker tampaknya tidak berfungsi (jika keduanya diinstal) setelah mengimplementasikannya ke proyek baru yang menjalankan Flutter 0.8.3-pre.47 . Aplikasi memaksa untuk menutup. Contohnya berfungsi jadi saya menyalin semua yang ada di contoh dan mengatur firebase saya tetapi masih tidak berfungsi.

Untuk menambahkan masalah yang telah diangkat oleh @deckerst , saya tidak yakin apakah ini pantas untuk ditutup ketika tidak ada paritas di Android dan iOS sehubungan dengan kemampuan untuk mengeksekusi kode yang menggunakan plugin lain

Sunting: baru perhatikan ada masalah lain untuk melacak ini

Terima kasih @slightfoot. Apakah melihat itu dan di sanalah saya menemukan tiket (#21925) untuk membuat eksekusi tanpa kepala iOS berfungsi dengan plugin. Memiliki referensi antara dua tiket ini akan sangat berguna.

Pada catatan terkait, apakah ada rencana untuk memasukkan eksekusi tanpa kepala dalam dokumentasi resmi misalnya sebagai bagian dari buku masak? Saya berasumsi begitu, tetapi saya pikir itu layak untuk ditanyakan mengingat kemungkinan ada sebagian besar komunitas yang tidak tahu untuk memeriksa media

Poin bagus @MaikuB , menambahkan bug dokumen untuk ini!

Latar Belakang-Dukungan dalam flutter secara langsung, lihat https://www.youtube.com/watch?v=_LfjILXswJs

Saya tidak begitu mengerti. Jika Flutter sekarang mendukung eksekusi latar belakang, mengapa tutorial sebagian besar memiliki kode khusus platform?

Dapatkan Outlook untuk Android https://aka.ms/ghei36


Dari: notifikasi [email protected]
Dikirim: Jumat, 21 September 2018 3:39:28
Untuk: bergetar/berkibar
Cc: Philip Weiss; Menyebutkan
Subjek: Re: [flutter/flutter] Flutter harus memberikan abstraksi untuk eksekusi latar belakang (#3671)

Latar Belakang-Dukungan dalam flutter secara langsung, lihat https://www.youtube.com/watch?v=_LfjILXswJs


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub https://github.com/flutter/flutter/issues/3671#issuecomment-423490126 , atau matikan utasnya https://github.com/notifications/unsubscribe-auth/ABWxFrGMGvfFtwkf025Q2Je6lUTZu2aJpZ5ud .

@dude8604 tutorial ini untuk pengembang plugin yang ingin mengembangkan plugin untuk melakukan beberapa operasi latar belakang tertentu.

Konsumen dari beberapa plugin tertentu buta (sebanyak mungkin) terhadap implementasi khusus platform.

Jadi sebagai Konsumen apakah ada cara untuk menjalankan kode arbitrer di latar belakang, jika tidak ada plugin untuk kasus penggunaan khusus saya?


Dari: pemberitahuan Chris [email protected]
Dikirim: Sabtu, 22 September 2018 17:43:16
Untuk: bergetar/berkibar
Cc: Philip Weiss; Menyebutkan
Subjek: Re: [flutter/flutter] Flutter harus memberikan abstraksi untuk eksekusi latar belakang (#3671)

@dude8604 https://github.com/dude8604 tutorial ini untuk pengembang plugin yang ingin mengembangkan plugin untuk melakukan beberapa operasi latar belakang tertentu.

Konsumen dari beberapa plugin tertentu buta (sebanyak mungkin) terhadap implementasi khusus platform.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub https://github.com/flutter/flutter/issues/3671#issuecomment-423783230 , atau matikan utasnya https://github.com/notifications/unsubscribe-auth/ABWxFhmlurQ08wWXLmMvE3E6yQ_lYvS1ks5Z .

@ dude8604 Tidak.

Sejauh yang saya ketahui saat ini:

Anda tidak bisa "menjalankan kode arbitrer di latar belakang". Android sekarang ketat . iOS selalu begitu.

@dude8604 , @christocracy benar. Fungsionalitas eksekusi latar belakang yang ditunjukkan dalam artikel Medium ditargetkan untuk pengembang yang ingin membuat plugin yang dapat mengeksekusi kode Dart di latar belakang. Sebagian besar pengguna Flutter tidak perlu menulis kode khusus platform untuk eksekusi latar belakang kecuali tidak ada plugin yang cocok dengan kasus penggunaan mereka karena plugin ini akan mengabstraksi kode khusus platform di belakang antarmuka Dart.

android_alarm_manager dan image_picker tampaknya tidak berfungsi (jika keduanya diinstal) setelah mengimplementasikannya ke proyek baru yang menjalankan Flutter 0.8.3-pre.47 . Aplikasi memaksa untuk menutup. Contohnya berfungsi jadi saya menyalin semua yang ada di contoh dan mengatur firebase saya tetapi masih tidak berfungsi.

@ rupert2133 maukah Anda mengajukan masalah dengan informasi lebih lanjut? Jangan ragu untuk menyebutkan saya agar saya diberi tahu. Masalah ini untuk persyaratan yang lebih luas untuk eksekusi latar belakang kode Dart dan ditutup, jadi tanggapan tambahan apa pun di sini kemungkinan akan terkubur.

Android_alarm_manager dan image_picker tampaknya tidak berfungsi (jika keduanya diinstal) setelah

Itu mengingatkanku. Kemarin saat mengimplementasikan Headless Android di plugin saya, saya mengalami kesalahan yang berasal dari googlemaps here .

Ketika semua plugin didaftarkan ulang dalam status Headless, registrar.activity() == null .

Saya harus meretasnya secara manual untuk mem-boot aplikasi saya:

public static void registerWith(Registrar registrar) {
    final GoogleMapsPlugin plugin = new GoogleMapsPlugin();
+    Activity activity = registrar.activity();
+    if (activity != null) {
      registrar.activity().getApplication().registerActivityLifecycleCallbacks(plugin);
      registrar
              .platformViewRegistry()
              .registerViewFactory(
                      "plugins.flutter.io/google_maps", new GoogleMapFactory(plugin.state, registrar));
+    }
  }

Ini akan menjadi masalah dengan sejumlah besar plugin, saya kira.

Saya ingin menjalankan layanan latar belakang dan membaca peristiwa tertentu, memproses dan mungkin merekam data, dan jika perlu membuat pemberitahuan yang akan meluncurkan aplikasi utama jika ditekan. Beberapa contoh kejadiannya adalah: perangkat Bluetooth baru dalam jangkauan, data masuk pada soket, data masuk dari perangkat USB, SMS diterima, lokasi GPS berubah, upaya koneksi perangkat Bluetooth, tombol fisik tertentu ditekan, data akselerometer melebihi nilai yang ditentukan, jika aplikasi utama dihentikan, dan banyak hal lain yang tidak saya pikirkan. Jika seseorang dapat membuat plugin yang komprehensif (dengan lisensi sumber terbuka atau gratis) untuk ini yang berfungsi di iOS dan Android, saya pikir masalah ini dapat diselesaikan. Dan saya akan sangat bersyukur bahwa saya dapat mulai berkembang dengan Flutter.

@bkonyi Jadi, mana dari hal-hal di atas yang saat ini dapat saya lakukan dengan plugin yang ada? Bisakah saya menggunakan AlarmManager untuk melakukan polling untuk acara ini? Tetapi AlarmManager tidak berfungsi di iOS, bukan?

@dude8604 Yang terbaik yang akan Anda dapatkan untuk acara berkala di iOS adalah melalui "background-fetch" API. Saya akan porting plugin ini untuk bergetar segera.

API "Background Fetch" iOS akan membangunkan aplikasi yang sedang tidur di latar belakang setiap 15 menit (ini adalah interval tercepat yang memungkinkan ) memberikan aplikasi Anda tepat 30 detik waktu berjalan di latar belakang. Namun, iOS menggunakan pembelajaran mesin (mungkin) dan akan membatasinya berdasarkan waktu dan frekuensi penggunaan perangkat/aplikasi (misalnya: di malam hari, saat pengguna mungkin sedang tidur, acara pengambilan mungkin datang sekali/jam.

@christocracy @bkonyi Jadi semua ini dan Android yang setara dapat dibuat menjadi plugin? Bagaimana saya bisa membuat permintaan fitur untuk ini?

@dude8604 Anda tidak bisa hanya melambaikan tongkat ajaib dan *poof* . Anda pergi memakai sarung tangan kerja Anda dan membuatnya sendiri. Jika Anda tidak bisa membuatnya sendiri, Anda akan menemukan seseorang yang bisa dan Anda membayar mereka puluhan ribu dolar.

@christocracy Anda benar, tapi saya berharap salah satu perusahaan terbesar di dunia akan memiliki sumber daya untuk mengembangkan produk berfitur lengkap dan tidak mengharuskan penggunanya menghabiskan puluhan ribu dolar untuk membuatnya cukup berguna.

Yah, ya itu adalah perusahaan besar.

Korporasi tersebut juga terdiri dari individu-individu, yang tidak ada di mana-mana. Tidak ada kerangka kerja yang dapat mencakup semuanya di luar kotak, karena jika Anda mencoba proyek Anda akan berubah menjadi tumpukan yang terbakar... yah, sampah.
Ada ratusan API khusus platform dan tidak ada satu tim pun yang akan menanganinya. Anda harus mengikat beberapa sendiri.

@dude8604 Pertimbangkan bahwa definisi Anda tentang "fitur lengkap" tidak sama dengan definisi saya. Tanggung jawab mereka adalah menangani persimpangan.

1 f you write this

Apakah kami memiliki arahan yang jelas dari dokumen? Saya melihat Rilis Pratinjau 2 mengatakan bahwa ia memiliki dukungan untuk eksekusi latar belakang. Beberapa contoh akan baik untuk pergi.

@Pushan-Gupta background-execution adalah hal khusus plugin.

Itu tergantung apa yang ingin Anda lakukan. Lacak lokasi? Terima pemberitahuan push? Pantau geofences? Deteksi perangkat BT? suar? Bermusik?

Tidak ada "satu dering untuk mengatur mereka semua dukungan untuk eksekusi latar belakang"

@christocracy Maaf saya tidak tahu itu. Saya bertujuan untuk hal tertentu. Katakanlah saya ingin membuat beberapa permintaan posting dari aplikasi. Tapi koneksi terputus. Segera setelah perangkat kembali online, tidak peduli apakah aplikasi terbuka atau tidak, antrian permintaan posting tersebut harus diproses.

Contoh: Whatsapp mengantrekan pesan sebelum mengirimnya ke server. Jika perangkat offline, perangkat akan menyimpan antrian dan melayaninya segera setelah perangkat online.

BTW Saya memiliki PR, membahas pendaftaran plugin untuk Isolat latar belakang. Jika ada yang punya pemikiran...

https://github.com/flutter/engine/pull/6396

Apa gunanya FlutterHeadlessDartRunner saat ini?
Saya telah menerapkan eksekusi latar belakang di Android saat ini (tidak ada plugin hanya FlutterNativeView(ctx, true) ), dan itu agak mudah dilakukan.
Tetapi di iOS itu hanya mogok

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: <strong i="10">@escaping</strong> () -> Void) {
    let headless = FlutterHeadlessDartRunner.init()
    headless.run(withEntrypoint: "main") // just EXC_BAD_ACCESS here
}

Hai,
Tolong bantu di aplikasi pengingat di flutter ios

@MohdLucky Dan bantuan yang Anda butuhkan adalah ..?

@christocracy apakah Anda memiliki pembaruan tentang status implementasi plugin background_fetch?

tidak memperbarui status implementasi plugin background_fetch, berikan beberapa kode contoh untuk
menjalankan pemberitahuan latar belakang.

Pembaruan apa pun tentang ini ... Saya benar-benar berpikir bahwa ini adalah bagian dari flutter :( ..ini adalah masalah yang hampir sama dengan solusi hibrida web lainnya ...

@radvansky-tomas Saya tidak tahu mengapa orang tidak mengerti bahwa ini bukan tanggung jawab yang berdebar. Bahkan jika Anda harus mengimplementasikan eksekusi latar belakang secara asli, Anda masih memiliki keuntungan dari satu basis kode tunggal. Menulis satu plugin flutter yang melakukan pekerjaan latar belakang Anda hanya membutuhkan satu atau dua hari kerja. Saya memiliki masalah yang sama, saya membutuhkan layanan Android yang mampu memutar musik untuk saya. Saya baru saja menulisnya di kotlin, menerapkan lapisan komunikasi menggunakan flutter dan kemudian melakukan hal yang sama untuk iOS.
Sangat mungkin untuk hanya menggunakan sistem latar belakang asli sistem.
Alih-alih mengeluh di sini bahwa X tidak diterapkan, Anda benar-benar dapat menerapkannya tanpa masalah apa pun menggunakan ekosistem yang disediakan oleh tim.

@SirWindfield Sayangnya Anda tidak tahu apa yang Anda bicarakan. Ini adalah bagian penting dari arsitektur, bukan plugin itu sendiri.

Flutter dihadirkan sebagai solusi lintas platform yang menghasilkan kode asli, yaitu diharapkan dapat menjalankan kode dalam bahasanya (Dart) setiap kali OS mengizinkannya.

Jadi, jika aplikasi berjalan setelah pemberitahuan jarak jauh diterima, dan Anda dapat menempatkan breakpoint dalam kode asli yang ada, Anda harus dapat memanggil kode flutter/dart Anda di mana layanan, model, dan akhirnya UI Anda.

Untuk membuatnya dalam kasus Anda ... katakanlah bahwa musik Anda diputar di latar belakang dan kemudian Anda menyelesaikan daftar putar Anda ... setelah 10 menit adalah aplikasi Anda dimatikan. Kemudian Anda memanggil siri, atau menggunakan headphone untuk memulai pemutaran lagi aplikasi Anda, titik masuk apa pun yang Anda pilih...kode asli dijalankan, tetapi bukan UI-nya, kode flutter Anda tidak diinisialisasi dan Anda hilang seperti saya dengan notifikasi saya.

Jadi tidak, itu tidak mungkin, saya dapat menulis pemberitahuan penangkapan plugin asli untuk saya, tetapi kemudian saya memerlukan akses ke logika bisnis bergetar untuk memproses data, dalam kasus saya crypto decrypt dan merilis pemberitahuan lokal dengan konten yang didekripsi

Kami akan, saya telah mengujinya di ponsel saya secara ekstensif dan berfungsi tanpa masalah apa pun.
Mungkin ponsel saya tidak pernah mematikan aplikasi. buruk saya kemudian.

@christocracy ada pembaruan tentang plugin background_fetch Chris?

@ethael Inilah repo kosong untuk Anda perhatikan untuk pembaruan.
https://github.com/transistorsoft/flutter_background_fetch

@radvansky-tomas Anda dapat menangani peristiwa latar belakang dalam kode Dart dengan membuat isolasi latar belakang seperti yang dijelaskan dalam posting Medium ini tentang eksekusi latar belakang . Anda mungkin perlu menulis beberapa kode asli untuk setiap platform agar sesuai dengan kebutuhan khusus Anda kecuali ada plugin yang sudah ada yang melakukan apa yang Anda inginkan (tidak mungkin, karena saya tidak mengetahui banyak plugin yang mendukung eksekusi latar belakang saat ini).

@bkonyi Terima kasih atas balasannya, saya mulai mengubah plugin firebase_messaging untuk mendukung eksekusi latar belakang...tetapi masalah ini lebih tentang beberapa cara umum untuk melakukannya. Maksud saya itu harus menjadi bagian dari template = runner dan sisi panahnya di mana para pengembang dapat mengeksekusi kode tanpa kepala seperti itu, beberapa aturan, standar pola seperti sekarang ada di beberapa blog, saran, dll.

Beberapa pekerjaan awal selesai: https://github.com/radvansky-tomas/plugins/tree/master/packages/firebase_messaging

Mengikuti beberapa panduan dari https://github.com/bkonyi/FlutterGeofencing

Saya harus menyelesaikannya pada akhir minggu ini, saya hanya mengerjakan bit iOS untuk saat ini. Contoh proyek menggunakan plugin pemberitahuan lokal untuk menunjukkan bahwa pesan diterima di latar belakang (pemberitahuan senyap) dan kemudian merilis yang baru lokal, untuk mewujudkan keberhasilan.

Beberapa pekerjaan awal selesai: https://github.com/radvansky-tomas/plugins/tree/master/packages/firebase_messaging

Mengikuti beberapa panduan dari https://github.com/bkonyi/FlutterGeofencing

Saya harus menyelesaikannya pada akhir minggu ini, saya hanya mengerjakan bit iOS untuk saat ini. Contoh proyek menggunakan plugin pemberitahuan lokal untuk menunjukkan bahwa pesan diterima di latar belakang (pemberitahuan senyap) dan kemudian merilis yang baru, untuk mewujudkan keberhasilan.

@goderbauer dan saya sebenarnya ingin menambahkan dukungan ini, tetapi kami akan dengan senang hati membantu Anda dengan desain dan ulasan jika Anda berencana membuat permintaan tarik.

Jadi saya cukup banyak menyelesaikan bagian itu, jadi sekarang saya dapat menerima pemberitahuan push diam dan panggilan balik saya yang ditulis dalam dart dijalankan saat aplikasi berada di latar belakang.

Namun, saya tidak dapat mengakses plugin lain di sana. Panggilan balik harus berupa metode root/statis dan benar-benar tidak mendapatkan cara memanggil apa pun dari sana.

Jadi saya mencoba membuat tes sederhana, menggunakan plugin pemberitahuan lokal bergetar untuk mengirim pemberitahuan lokal setelah menerima pemberitahuan diam, tetapi plugin tampaknya tidak dapat diakses (tidak terdaftar?)

Saya menemukan posting serupa di sini: https://github.com/flutter/engine/pull/6396

Apakah ada langkah lain yang perlu saya lakukan untuk memuat plugin tersebut?

Panggilan balik tingkat root saya:
void callback(FirebaseMessage m, MessageEvent e) async { print('Message $m Event: $e'); final SendPort send = IsolateNameServer.lookupPortByName('messaging_send_port'); send?.send(e.toString()); }

Pertanyaannya bukan bagaimana mengakses semua kode panah + plugin dari panggilan balik itu ... kueri firestore, dll

Implementasi Pengambilan Latar Belakang saya akhirnya dirilis.
background_fetch

@christocracy Anda benar, tapi saya berharap salah satu perusahaan terbesar di dunia akan memiliki sumber daya untuk mengembangkan produk berfitur lengkap dan tidak mengharuskan penggunanya menghabiskan puluhan ribu dolar untuk membuatnya cukup berguna.

Itu sangat benar. Jika Anda mendapatkan waktu orang, Anda harus memberikan sesuatu kembali kepada mereka. Jika tidak, maka jangan buat judul pemasaran yang mewah ini!

Sepertinya masalah ini masih menyebabkan kesengsaraan orang? Itu ditutup dan memiliki banyak komentar, jadi sepertinya kami tidak akan membuat banyak perubahan proyek konkret dari masalah ini. :( (Kami perlu mengajukan yang baru untuk membuat lebih banyak kemajuan yang saya harapkan.)

Saya akan sangat tertarik jika kami mendokumentasikan perubahan nyata yang diinginkan di sini. Kedengarannya seperti lebih banyak contoh latar belakang yang diinginkan? (mis. https://github.com/flutter/flutter/issues/23794)

Bagaimanapun, kami ingin masalah individu diajukan dengan pertanyaan individu. Seperti yang telah disebutkan orang lain di atas, Flutter adalah proyek besar dan kompleks, dan meskipun kami memiliki tim yang besar (dan berkembang pesat) di sini di Google, kami masih belum memiliki cukup insinyur yang bekerja penuh waktu di Flutter untuk menjawab semua masalah secara bersamaan. Flutter adalah 100% open source dan semua masalah kami ada di GitHub. Patch selalu diterima tentu saja. :)

Untuk setiap masalah/perubahan yang diinginkan, harap ajukan masalah baru agar semua kontributor tahu bagaimana kami dapat membantu lebih lanjut: https://github.com/flutter/flutter/issues/new

Terima kasih!

@eseidel tantangan diterima: #24278

Saya berharap untuk menghindari penulisan kode khusus perangkat dan memiliki implementasi Flutter Dart API mungkin berdasarkan peristiwa yang akan menyembunyikan spesifikasi perangkat dan os serta implementasi spesifik.

sudah terpecahkan di sini

@ Krunal79-flutter bagaimana tepatnya, pendekatan itu masih memiliki masalah yang sama. Masalahnya adalah bahwa dalam skenario Anda flutter sudah diinisialisasi dan itu bukan akses latar belakang yang tepat. Masalah apa yang saya miliki dan miliki, adalah ketika aplikasi benar-benar mati dan pemberitahuan diam (atau ekstensi aplikasi) akan membangunkan aplikasi Anda dan Anda perlu melakukan logika "panah" saat flutter belum berjalan (yaitu tidak ada UI).

Ini seharusnya menjadi masalah prioritas yang jauh lebih tinggi bagi siapa pun yang mengelola tim Flutter. Menerapkan fungsionalitas latar belakang adalah kesulitan besar bagi rata-rata pengembang Flutter dan sering kali rusak dengan cara yang tidak sepele. Dan saya yakin banyak pengembang aplikasi saat ini berjuang dengan ini.

@tomoerlemans010 silakan lihat komentar di https://github.com/flutter/flutter/issues/3671#issuecomment -438113161.

Masalah khusus ini sudah ditutup, silakan tambahkan komentar ke masalah terbuka lainnya yang terkait dengan eksekusi latar belakang atau buat yang baru dengan masalah yang Anda hadapi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat