Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK

iOS 7 SDK: Peningkatan Multitasking

by
Read Time:11 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Uady (you can also view the original English article)

Tutorial ini akan mengajarkan Anda semua tentang peningkatan multitasking terbaru yang disediakan oleh iOS 7 SDK. Secara khusus, Anda akan belajar tentang Pengambilan Background, Remote Pemberitahuan, dan Layanan Transfer Latar Belakang API. Baca terus!


Overview Multitasking

Dengan iOS 7, Apple telah membuat tiga API multitugas baru yang tersedia bagi para pengembang:

  • Pengambilan Background 
  • Notifikasi Jarak Jauh
  • Layanan Transfer Background

Semua API ini memberi pemrogram kemampuan untuk mengembangkan aplikasi multitasking yang akan memanfaatkan perangkat keras perangkat dengan lebih baik sambil memberikan pengalaman yang lebih baik kepada pengguna. Tutorial ini akan mengajari Anda lebih banyak tentang ketiga peningkatan di atas dan kapan menggunakannya.


Background Fetch

Untuk membuat API Background Fetch lebih mudah dipahami, bayangkan Anda ingin membuat aplikasi berita. Secara hipotesis, kita membuat asumsi bahwa konten aplikasi ini disediakan dari web, dan salah satu fitur penting adalah mendapatkan pembaruan setiap kali pengguna meluncurkan aplikasi.

Sebelum iOS 7, pengembang dapat membuat aplikasi mulai mendapatkan konten baru setelah diluncurkan. Ini berfungsi, tetapi sisi negatifnya adalah pengguna harus menunggu beberapa saat setiap kali aplikasi dimulai. Juga, kecepatan koneksi telepon menjadi faktor yang signifikan. Bayangkan jika pengguna terhubung melalui jaringan seluler setelah satu atau dua minggu tidak aktif! Tentu saja, ini bukan yang diinginkan pengembang, karena cenderung menurunkan pengalaman pengguna.

Di iOS 7, semuanya telah berubah drastis! Dengan API Background Fetch, aplikasi hipotetis kita dapat benar-benar mengunduh konten baru secara pasif sementara masih tersisa di background. iOS 7 akan membangunkan aplikasi, menyediakan waktu pengerjaan background, dan, saat aplikasi selesai diperbarui, aplikasi akan kembali tidur sekali lagi. Tentu saja, pengguna tidak diberitahu bila ini terjadi. Mereka hanya menemukan konten baru yang siap diluncurkan saat peluncuran aplikasi.

Proses pembaruan dapat berlangsung pada interval yang telah ditentukan sebelumnya yang ditetapkan oleh programmer atau dalam interval yang ditentukan oleh sistem operasi. Jika Anda menetapkan interval khusus, Apple menyarankan untuk mengaturnya secara bijak dan tidak terlalu sering mengambil data di latar belakang. Melakukannya akan menyebabkan kehabisan baterai dan membuang sumber daya sistem. Jika Anda membiarkan sistem operasi menangani berbagai hal, iOS 7 akan membuat prediksi penggunaan. Ini dilakukan dengan mengamati seberapa sering aplikasi diluncurkan dan pada jam berapa. Ini kemudian mengantisipasi perilaku ini dengan pergi online dan mengambil konten sebelum memprediksi pengguna akan menginginkannya. Misalnya, jika pengguna aplikasi berita hipotetis kita meluncurkan aplikasi setiap sore, iOS mengamati ini dan memutuskan bahwa aplikasi harus mengambil konten kapan saja di sore hari dan sebelum waktu peluncuran yang biasa. Sangat keren!

Proses pengambilan yang dijelaskan di atas mencakup tiga langkah:

  1. Untuk mengaktifkan kemampuan background fetch
  2. Untuk mengatur waktu interval minimum
  3. Untuk menerapkan metode delegasi baru application:performFetchWithCompletionHandler:

Mari kita periksa semuanya secara lebih detail.

Seperti yang baru saja saya sebutkan, langkah pertama dalam keseluruhan proses adalah untuk mengaktifkan kemampuan mengambil latar belakang untuk aplikasi di Xcode 5. Ini bisa dilakukan dengan dua cara. Cara pertama menggunakan file .plist, di mana Anda perlu menambahkan kunci mode background yang diperlukan dengan nilai fetch, seperti ini:

gt7_1_plist_fetchgt7_1_plist_fetchgt7_1_plist_fetch

Langkah-langkah berikut adalah pendekatan alternatif:

  • Klik pada nama proyek di sisi kiri atas di Xcode
  • Klik pada tab Capabilities di jendela tengah
  • Di bawah pilihan Mode Background, periksa kotak centang Ambil Background
gt7_2_capabilities_fetchgt7_2_capabilities_fetchgt7_2_capabilities_fetch

Secara default, nilai interval pengambilan awal disetel ke mode UIApplicationBackgroundFetchIntervalNever, yang berarti bahwa pengambilan background tidak akan pernah dilakukan. Jika nilai ini tidak berubah, pengambilan background tidak akan berfungsi, meskipun diaktifkan dengan salah satu dari dua cara yang dibahas di atas. Untuk mencapai ini, Anda perlu pergi ke application:didFinishLaunchingWithOptions: dan mengatur nilai interval pengambilan minimum sebagai berikut:

UIApplicationBackgroundFetchIntervalMinimum adalah nilai interval minimum yang diizinkan dan dikelola oleh sistem. Tentu saja, Anda dapat mengatur interval waktu khusus hanya dengan menyediakan metode di atas dengan nilai NSTimeInterval. Namun, kecuali jika perlu, biasanya lebih baik untuk membiarkan iOS memutuskan kapan harus memungkinkan aplikasi bekerja di background dan mengambil konten baru. Jika Anda menetapkan minimum, penting untuk menyadari bahwa UIApplicationBackgroundFetchIntervalMinimum tidak benar-benar menentukan waktunya. Mereka lebih seperti saran. iOS akan mencoba mengikuti jadwal jika bisa, tetapi, tergantung pada sumber daya sistem yang tersedia, pengambilan dapat terjadi lebih sering atau lebih jarang daripada yang diinginkan.

Langkah terakhir yang diperlukan adalah mengimplementasikan yang baru ditambahkan application:performFetchWithCompletionHandler: metode delegasi. Yang ini disebut setiap kali pengambilan background dilakukan. Penangan penyelesaian metode ini menerima salah satu dari tiga nilai berikut untuk memberi tahu iOS tentang hasil pengambilan:

  1. UIBackgroundFetchResultNewData: Jika data baru ditemukan oleh pengambilan
  2. UIBackgroundFetchResultNoData: Jika tidak ada data baru yang ditemukan
  3. UIBackgroundFetchResultFailed: Jika kesalahan terjadi selama proses fetch

Mari kita lihat ini dalam aksi:

Jika data baru ditemukan, Anda juga harus membuat pembaruan antarmuka pengguna yang diperlukan. Ini harus terjadi segera karena dua alasan: (1) pengguna harus melihat konten ketika aplikasi berikutnya diluncurkan, dan (2) snapshot aplikasi akan tetap diperbarui.

Ada beberapa fakta lagi yang harus Anda ketahui. Pertama, ketika aplikasi diluncurkan di latar belakang, ia memiliki sekitar tiga puluh detik untuk menyelesaikan semua tugas yang diperlukan dan memanggil handler penyelesaian. Jika batas waktu ini terlampaui, aplikasi akan ditangguhkan lagi. Untuk aplikasi yang membutuhkan lebih dari 30 detik (mungkin karena unduhan media), Anda harus menjadwalkan pengambilan background menggunakan API Layanan Transfer background. Kita akan mendiskusikan opsi ini lebih lanjut nanti.

Setelah Anda menyiapkan mekanisme dan siap untuk bekerja, Apple menyediakan dua cara untuk menguji background fetch saat menggunakan Simulator.

Pendekatan pertama mengikuti langkah-langkah ini:

  • Jalankan aplikasi seperti biasa di Simulator
  • Saat aplikasi berjalan, kembali ke Xcode
  • Klik pada Debug > Simulasikan Background Fetch Menu 

Cara ini berguna untuk mencoba API ketika aplikasi sedang berjalan. Cara kedua lebih terlibat, tetapi memungkinkan Anda untuk menguji aplikasi sementara tetap di latar belakang. Untuk mencoba ini, ikuti langkah-langkah berikut:

  • Buka daftar Skema dan klik opsi Kelola Skema....
    gt7_3_manage_schemes
  • Pastikan bahwa skema saat ini dipilih dan kemudian gandakan dengan mengklik tombol gir di bagian bawah jendela dan pilih Duplikat.
    gt7_4_duplicate_schemegt7_4_duplicate_schemegt7_4_duplicate_scheme
  • Tetapkan nama untuk duplikat jika Anda mau.
  • Memiliki opsi Run yang dipilih di sebelah kiri, lalu klik pada tab Options.
  • Periksa checkbox Launch due to a background fetch event dan klik OK dua kali.
    gt7_5_scheme2gt7_5_scheme2gt7_5_scheme2
  • Jalankan aplikasi menggunakan skema duplikat.

Pengambilan background dimaksudkan untuk digunakan untuk pembaruan aplikasi yang tidak penting karena waktu yang terjadi mungkin berbeda. Untuk pembaruan yang lebih penting, lihat bagian Notifikasi Jauh yang akan datang berikutnya. Secara umum, API pengambilan background sesuai untuk aplikasi yang ingin mengelola konten dengan lancar. Beberapa contoh kategori aplikasi termasuk berita, jejaring sosial, cuaca, dan berbagi foto.


Notifikasi Jarak Jauh

Bayangkan kita membuat aplikasi dengan tutorial tertulis dan video. Anggaplah bahwa pengguna dapat mengunduh video tutorial baru 2-3 kali per bulan. Jadi, bagaimana kita membuat pengguna sadar akan rilis video baru? Kita tidak dapat mengadopsi solusi yang menggunakan API pengambilan latar belakang atau yang serupa, karena ini akan mengarah pada pemborosan sumber daya perangkat dan permintaan tidak berguna ke server. kita juga tidak tahu kapan rilis video baru sudah siap. Oleh karena itu, kita perlu menggunakan Notifikasi Push, jadi setiap kali ada konten baru, kita dapat memberi tahu pengguna tentang itu hanya dengan memperingatkan mereka. Kita berharap pengguna akan meluncurkan aplikasi dan mengunduh konten baru. Masalahnya adalah bahwa pendekatan ini memaksa pengguna untuk menunggu video diunduh, dan jika konten cukup besar, mereka mungkin harus menunggu untuk waktu yang lama. Jadi, bagaimana pengguna dapat memperoleh konten baru dalam aplikasinya ketika konten ini tersedia tetapi tanpa menunggu?

Di sinilah Remote Notifications berguna. Notifikasi Jarak Jauh sebenarnya adalah silent push notifications, artinya pemberitahuan push yang tidak memberi tahu pengguna tentang keberadaannya. Ketika new remote notification tiba, sistem akan secara diam-diam membangunkan aplikasi sehingga dapat menangani pemberitahuan. Aplikasi ini kemudian bertanggung jawab untuk memulai proses pengunduhan untuk konten baru. Ketika selesai mengunduh, pemberitahuan lokal dikirim ke pengguna. Ketika aplikasi diluncurkan, konten baru ada di sana menunggu pengguna.

Sama seperti Background Fetch, Remote Notifications bertujuan untuk menghilangkan waktu tunggu yang dihadapi pengguna ketika mengunduh konten baru atau mengunggah data ke server. Kedua API berfungsi dalam utas latar belakang dan pengguna akan diberi tahu setelah pekerjaan selesai. Namun, Pemberitahuan Jarak Jauh cocok dalam hal konten jarang diupdate atau sangat penting bagi pengalaman pengguna.

Untuk menggunakan Remote Notifications dalam suatu aplikasi, Anda harus terlebih dahulu mengaktifkannya. Anda dapat melakukannya dengan file *.plist atau tab proyek Capabilities baru. Jika Anda ingin menggunakan file *.plist, Anda perlu menambahkan tombol Required Background dengan nilai notifikasi jarak jauh sebagai berikut:

gt7_6_plist_remotegt7_6_plist_remotegt7_6_plist_remote

Untuk menggunakan tab Kemampuan, ikuti langkah-langkah berikut:

  • Klik pada nama proyek di sisi kiri atas di Xcode
  • Klik pada tab Capabilities di jendela tengah
  • Di bawah pilihan Mode background, periksa kotak centang Remote Notifications
gt7_7_capabilities_remotegt7_7_capabilities_remotegt7_7_capabilities_remote

Langkah selanjutnya adalah mengimplementasikan application:didReceiveRemoteNotification:fetchCompletionHandler: metode delegasi dalam file AppDelegate Anda. Ini disebut ketika pemberitahuan baru tiba. Gunakan handler penyelesaian untuk memberi tahu iOS tentang hasil fetch data:

Membuat pemberitahuan diam cukup mudah. Dalam payload notifikasi Anda hanya perlu menyertakan code-available: 1 bendera dan menghilangkan setiap peringatan atau data suara yang akan memberitahu pengguna.

Secara umum, semua yang valid saat bekerja dengan Pengambilan Latar Belakang juga berlaku di sini. Misalnya, Anda memiliki maksimum 30 detik untuk mengunduh konten baru dan memberi tahu sistem dalam metode di atas sebelum aplikasi kembali tidur. Jika konten baru perlu waktu untuk diunduh, maka pertimbangkan penggunaan API Background Transfer Service.

Perlu diingat bahwa Apple mengontrol laju pengiriman pemberitahuan jarak jauh (pemberitahuan push diam) yang dikirim dari penyedia push. Jika tarifnya normal, maka notifikasi normal dan silent segera dikirimkan. Namun, ketika pemberitahuan diam dikirim cukup sering, Apple Push Service akan menyimpannya untuk pengiriman di lain waktu. Pastikan Anda mengirim pemberitahuan jarak jauh dengan bijak.


Layanan Transfer Background 

Fitur hebat lainnya dari iOS 7 adalah API Background Transfer Service. Secara tradisional, mendapatkan atau mengirim potongan data yang besar belum mudah, terutama karena keterbatasan waktu berjalan dan untuk mentransfer manajemen data. Aplikasi diminta untuk menyelesaikan sebagian besar proses pengunggahan atau pengunduhan saat berada di latar depan. Namun, dengan iOS 7, semuanya benar-benar berbeda. Aplikasi dapat menikmati kebebasan lebih besar saat melakukan tugas-tugas latar belakang. Pertama-tama, dengan layanan transfer latar belakang, aplikasi diberikan waktu sebanyak yang mereka butuhkan untuk menyelesaikan transfer. Apakah mereka berada di latar depan atau di latar belakang tidak relevan. Keterbatasan waktu tidak lagi ada dan sistem sekarang bertanggung jawab untuk mengelola data yang sedang diunggah atau diunduh. Bahkan jika aplikasi tidak berjalan, iOS membangunnya untuk menangani situasi di mana keputusan harus dibuat. Beberapa contoh ini termasuk ketika unduhan file selesai atau ketika informasi lebih lanjut harus diberikan ke server.

Layanan transfer background didasarkan pada kelas NSURLSession, yang baru saja diperkenalkan dengan iOS 7. Kelas ini bertanggung jawab untuk mentransfer data melalui HTTP atau HTTPS, dan ini menyediakan kemampuan untuk tugas-tugas yang terkait dengan jaringan background. Seluruh ide di baliknya sederhana dan didasarkan pada penggunaan sesi, di mana satu sesi mengelola semua tugas transfer data terkait. Ada berbagai jenis sesi yang tersedia, tetapi sesi background adalah salah satu yang kita pedulikan di sini, dan itu selalu bekerja pada utas yang terpisah (proses) yang dibuat oleh sistem. Sesi latar mendukung tugas unduh (NSURLSessionDownloadTask) dan unggah (NSURLSesssionUploadTask), yang ditambahkan ke objek NSURLSession background.

Fakta lain yang patut dicatat terkait dengan transfer latar belakang adalah bahwa transfer dapat bersifat diskresioner atau non-diskresioner. Transfer non-diskresioner dapat dimulai hanya ketika aplikasi berada di latar depan, tetapi ada opsi untuk mengatur status diskresioner sesuai dengan kebutuhan aplikasi. Transfer diskresioner lebih disukai, karena ini memungkinkan sistem operasi untuk mencapai manajemen energi yang lebih efisien pada perangkat. Ada juga satu batasan yang berlaku pada transfer diskresioner, dan itu adalah bahwa mereka harus dilakukan hanya melalui jaringan WiFi. Transfer thread background selalu dimulai sebagai transfer diskresioner.

metode delegasi application:handleEventsForBackgroundURLSession:completionHandler: dipanggil ketika transfer background selesai sehingga tugas yang sudah selesai dapat ditangani. Misalnya, jika konten baru diunduh, Anda harus menerapkan metode delegasi ini untuk menyimpannya secara permanen dan memperbarui UI jika diperlukan. Metode ini juga disebut ketika kredensial diperlukan dari aplikasi untuk melanjutkan transfer. Umumnya, dalam metode delegasi ini Anda menerapkan semua logika yang diperlukan yang dibutuhkan oleh aplikasi Anda ketika proses unduhan atau unggahan berakhir dan aplikasi ada di dalam utas background. Tentu saja, Anda menggunakan handler penyelesaian untuk membiarkan sistem tahu ketika Anda selesai sehingga dapat menempatkan aplikasi kembali tidur.

Layanan transfer background sangat ideal untuk digunakan bersama dengan pengambilan background dan API notifikasi jarak jauh. Diberikan di atas, menjadi jelas bahwa praktik terbaik adalah menggunakan metode delegasi dari pengambilan latar belakang dan pemberitahuan jarak jauh untuk mengantre transfer Anda dan biarkan sistem melakukan pekerjaan. Lagi pula, kecuali data yang harus dipertukarkan dengan server memiliki footprint kecil, dalam banyak kasus 30 detik disediakan hanya untuk dua metode delegasi yang disebutkan sudah cukup untuk mengatur transfer latar belakang dan setiap tugas terkait. Gunakan kelas NSURLSession untuk menentukan semua transfer yang Anda inginkan dan untuk memastikan bahwa aplikasi Anda akan mengambil konten baru. Ini juga akan mengirim data apa pun yang harus diproses, terlepas dari waktu yang diperlukan.


Kesimpulan

Background Fetch, Remote Notifications, dan Background Transfer Service APIs adalah fitur yang akan sangat disukai oleh para pengembang untuk dilihat sejak lama. Untungnya, dengan dirilisnya iOS 7 Apple telah membuatnya lebih mudah dari sebelumnya untuk memproses data aplikasi. Mulai dari iOS 7 dan seterusnya, konten aplikasi hampir selalu dapat diperbarui, tetapi pada akhirnya tergantung pada masing-masing pengembang untuk mengurus ini dan menggunakan alat yang disediakan! Selamat melakukan multitasking, dan terima kasih telah membaca!

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.