Advertisement
  1. Code
  2. iOS SDK

Jaringan dengan NSURLSession: Bagian 1

by
Read Time:12 minsLanguages:
This post is part of a series called Working with NSURLSession.
Networking with NSURLSession: Part 2

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

Dari perspektif pengembang, salah satu perubahan yang lebih signifikan di iOS 7, dan OS X Mavericks dalam hal ini, adalah pengenalan NSURLSession. Meskipun NSURLSession mungkin tampak menakutkan pada pandangan pertama, penting bagi Anda untuk memahami apa itu, bagaimana hubungannya dengan NSURLConnection, dan apa perbedaannya. Dalam seri ini, saya akan membawa Anda melalui dasar-dasar NSURLSession sehingga Anda dapat memanfaatkan teknologi baru ini dalam aplikasi Anda sendiri.


Mengapa Mengganti NSURLConnection?

Pertanyaan pertama yang mungkin Anda tanyakan pada diri Anda adalah mengapa Apple merasa perlu untuk memperkenalkan NSURLSession sementara kami sangat senang dengan NSURLConnection. Pertanyaan sebenarnya adalah apakah Anda senang dengan NSURLConnection. Apakah Anda ingat saat itu Anda mengutuk dan melempar sesuatu ke NSURLConnection? Sebagian besar pengembang Cocoa berada di tempat itu, itulah sebabnya Apple memutuskan untuk kembali ke papan gambar dan membuat solusi yang lebih elegan, lebih cocok untuk web modern.

Meskipun NSURLSession dan NSURLConnection memiliki banyak kesamaan dalam hal cara kerjanya, pada level fundamental, mereka sangat berbeda. Apple menciptakan NSURLSession menyerupai konsep umum NSURLConnection, tetapi Anda akan belajar dalam rangkaian seri ini bahwa NSURLSession modern, lebih mudah digunakan, dan dibangun dengan mempertimbangkan mobile.


Apa itu NSURLSession?

Sebelum saya membahas perbedaan antara NSURLSession dan NSURLConnection, ada baiknya untuk melihat lebih dekat apa itu NSURLSession. Terlepas dari namanya, NSURLSession bukan hanya kelas lain yang dapat Anda gunakan dalam aplikasi iOS atau OS X. NSURLSession adalah teknologi pertama dan terpenting seperti halnya NSURLConnection.

Sesi adalah Wadah

NSURLSession dan NSURLConnection keduanya menyediakan API untuk berinteraksi dengan berbagai protokol, seperti HTTP dan HTTPS. Objek session, sebuah instance dari kelas NSURLSession, adalah apa yang mengelola interaksi ini. Ini adalah wadah yang sangat dapat dikonfigurasi dengan API elegan yang memungkinkan untuk kontrol berbutir halus. Ini menawarkan fitur yang tidak ada di NSURLConnection. Terlebih lagi, dengan NSURLSession, Anda dapat menyelesaikan tugas yang sama sekali tidak mungkin dengan NSURLConnection, seperti menerapkan penelusuran pribadi.

Task

Unit dasar kerja ketika bekerja dengan NSURLSession adalah task, sebuah instance dari NSURLSessionTask. Ada tiga jenis task, data taskupload task, dan download task.

  • Anda paling sering menggunakan data task, yang merupakan instance dari NSURLSessionDataTask. Data task digunakan untuk meminta data dari server, seperti data JSON. Perbedaan utama dengan tugas unggah dan unduh adalah mereka mengembalikan data langsung ke aplikasi Anda daripada melalui sistem file. Data hanya disimpan dalam memori.
  • Sesuai namanya, upload task digunakan untuk mengunggah data ke tujuan remote. NSURLSessionUploadTask adalah subkelas dari NSURLSessionDataTask dan berperilaku serupa. Salah satu perbedaan utama dengan data task biasa adalah bahwa upload task dapat digunakan dalam sesi yang dibuat dengan konfigurasi sesi latar belakang.
  • Download task, instance dari NSURLSessionDownloadTask, mewarisi langsung dari NSURLSessionTask. Perbedaan paling signifikan dengan data task adalah bahwa download tas menulis responsnya langsung ke file sementara. Ini sangat berbeda dari data task biasa yang menyimpan respons dalam memori. Dimungkinkan untuk membatalkan download task dan melanjutkannya di lain waktu.

Seperti yang dapat Anda bayangkan, asinkronisitas adalah konsep kunci dalam NSURLSession. NSURLSession API mengembalikan data dengan memanggil completion handler atau melalui delegasi sesi. API NSURLSession dirancang dengan fleksibilitas dalam pikiran karena Anda akan melihat sedikit kemudian dalam tutorial ini.

Bertemu dengan keluarga

Seperti yang saya sebutkan sebelumnya, NSURLSession adalah sebuah teknologi dan kelas yang akan Anda tangani. NSURLSession API menampung sejumlah kelas, tetapi NSURLSession adalah komponen utama yang mengirim permintaan dan menerima tanggapan. Konfigurasi objek session, bagaimanapun, ditangani oleh turunan dari kelas NSURLSessionConfiguration. Kelas NSURLSessionTask dan tiga subkelas konkretnya adalah worket dan selalu digunakan bersama dengan sesi karena itu adalah sesi yang membuat objek task.

Delegasi

Baik NSURLSession dan NSURLConnection sangat bergantung pada pola delegasi. Protokol NSURLSessionDelegate menyatakan beberapa metode delegasi untuk menangani event di level session. Selain itu, kelas dan subkelas NSURLSessionTask masing-masing menyatakan protokol delegasi untuk menangani event level task.

Teman-teman lama

NSURLSession API dibangun di atas kelas yang sudah Anda kenal, seperti NSURL, NSURLRequest, dan NSURLResponse.


Apa perbedaannya?

Apa perbedaan NSURLSession dengan NSURLConnection? Ini adalah pertanyaan penting, karena NSURLConnection tidak ditinggalkan oleh Apple. Anda masih dapat menggunakan NSURLConnection di proyek Anda. Mengapa Anda harus menggunakan NSURLSession?

Hal pertama yang harus dipahami adalah bahwa instance NSURLSession adalah objek yang mengelola permintaan dan respons. Ini mirip dengan cara kerja NSURLConnection, tetapi perbedaan utama adalah bahwa konfigurasi permintaan ditangani oleh objek session, yang merupakan objek berumur panjang. Ini dilakukan melalui kelas NSURLSessionConfiguration. Tidak hanya menyediakan konfigurasi NSURLSession API halus melalui kelas NSURLSessionConfiguration, itu mendorong pemisahan data (body permintaan) dari metadata. NSURLSessionDownloadTask mengilustrasikan hal ini dengan baik dengan langsung menulis respons ke sistem file.

Otentikasi lebih mudah dan ditangani lebih elegan oleh NSURLSession. NSURLSession API menangani otentikasi berdasarkan koneksi daripada atas dasar permintaan, seperti yang dilakukan NSURLConnection. NSURLSession API juga membuatnya lebih mudah untuk menyediakan opsi HTTP dan setiap sesi dapat memiliki wadah penyimpanan terpisah tergantung pada bagaimana Anda mengkonfigurasi sesi.

Dalam pendahuluan, saya katakan bahwa NSURLSession menyediakan antarmuka modern, yang terintegrasi dengan anggun dengan iOS 7. Salah satu contoh integrasi ini adalah unggahan dan unduhan NSURLSession yang tidak diproses. NSURLSession dioptimalkan untuk menghemat masa pakai baterai, mendukung penghentian sementara, pembatalan, dan dilanjutkannya task serta API multitasking UIKit. Apa yang tidak disukai dari NSURLSession?


Membuat Kaki Anda Basah

Langkah 1: Pengaturan Proyek

API baru paling baik dipelajari dengan berlatih jadi ini saatnya untuk menyalakan Xcode dan membuat kaki kita basah. Luncurkan Xcode 5, buat proyek baru dengan memilih New > Project ... dari menu File, dan pilih templat Single View Application dari daftar templat aplikasi iOS.

Create a new project in Xcode 5.Create a new project in Xcode 5.Create a new project in Xcode 5.

Beri nama proyek Anda, beri tahu Xcode tempat Anda ingin menyimpannya, dan tekan Create. Tidak perlu menempatkan proyek di bawah source control.

Configure the project.Configure the project.Configure the project.

Langkah 2: Membuat Obyek Session

Ketika bekerja dengan NSURLSession, penting untuk memahami bahwa objek session, sebuah instance dari NSURLSession, adalah pemain bintang. Ini menangani permintaan dan respons, mengonfigurasi permintaan, mengelola penyimpanan dan status sesi, dll. Membuat sesi dapat dilakukan beberapa cara. Cara tercepat untuk memulai adalah dengan menggunakan metode kelas sharedSession NSURLSession seperti yang ditunjukkan di bawah ini.

Buat objek session dalam metode viewDidLoad view controller seperti yang ditunjukkan di atas. Objek session yang kami buat baik-baik saja untuk contoh kami, tetapi Anda mungkin ingin sedikit lebih fleksibel dalam kebanyakan kasus. Objek session yang baru saja kita buat menggunakan global NSURLCache, NSHTTPCookieStorage, dan NSURLCredentialStorage. Ini berarti bahwa ia bekerja sangat mirip dengan implementasi standar NSURLConnection.

Langkah 3: Membuat Data Task

Untuk menempatkan objek session untuk digunakan, mari kita query API Pencarian iTunes Store dan mencari perangkat lunak yang dibuat oleh Apple. API Pencarian iTunes Store mudah digunakan dan tidak memerlukan otentikasi, yang membuatnya ideal untuk contoh kita.

Untuk kueri API pencarian, kami perlu mengirim permintaan ke https://itunes.apple.com/search dan masukan beberapa parameter. Seperti yang kita lihat sebelumnya, saat menggunakan NSURLSession API, permintaan diwakili oleh task. Untuk kueri pencarian API, yang kita butuhkan adalah data task , instance dari kelas NSURLSessionDataTask. Lihatlah implementasi viewDidLoad yang diperbarui seperti yang ditunjukkan di bawah ini.

Ada sejumlah metode yang tersedia untuk membuat task, tetapi konsep kunci untuk dipahami adalah bahwa objek session melakukan pembuatan dan konfigurasi task yang sebenarnya. Dalam contoh ini, kami memanggil dataTaskWithURL:completionHandler: dan meneruskannya sebuah instance dari NSURL dan juga completion handler. Completion handler menerima tiga argumen, data raw dari respons (NSData), objek respons (NSURLResponse), dan objek kesalahan (NSError). Jika permintaan berhasil, objek error adalah nil. Karena kami tahu permintaan mengembalikan respons JSON, kami membuat objek Foundation dari objek data yang kami terima dan mencatat hasilnya ke konsol.

Penting untuk dipahami bahwa objek error yang dimasukan ke completion handler hanya diisi, bukan nil, jika permintaan gagal atau mengalami kesalahan. Dengan kata lain, jika permintaan mengembalikan respons 404, permintaan itu berhasil sejauh sesi yang bersangkutan. Objek error kemudian akan menjadi nil. Ini adalah konsep penting untuk dipahami ketika bekerja dengan NSURLSession dan NSURLConnection dalam hal ini.

Bangun proyek dan jalankan aplikasi di Simulator iOS atau pada perangkat fisik, dan periksa Konsol Xcode. Tidak ada yang dicetak ke konsol. Apa yang salah? Seperti yang saya sebutkan sebelumnya, NSURLSession API mendukung penghentian, pembatalan, dan melanjutkan task atau permintaan. Perilaku ini mirip dengan NSOperation dan mungkin mengingatkan Anda tentang pustaka AFNetworking. Task memiliki properti state yang menunjukkan apakah task sedang berjalan (NSURLSessionTaskStateRunning), ditangguhkan (NSURLSessionTaskStateSuspended), membatalkan (NSURLSessionTaskStateCanceling), atau selesai (NSURLSessionTaskStateCompleted). Ketika objek session membuat task, tugas memulai kehidupannya dalam status ditangguhkan. Untuk memulai task, kita perlu mengatakannya untuk melanjutkan dengan memanggil resume pada task. Perbarui metode viewDidLoad seperti yang ditunjukkan di bawah ini, jalankan aplikasi sekali lagi, dan periksa output di konsol. Misi selesai.


Mengunduh Sumber Daya Remote

Pada contoh sebelumnya, kami menggunakan completion handler  untuk memproses respons yang kami terima dari permintaan. Dimungkinkan juga untuk mencapai hasil yang sama dengan mengimplementasikan protokol delegasi task. Mari kita lihat apa yang diperlukan untuk mengunduh gambar dengan memanfaatkan NSURLSession dan NSURLSessionDownloadTask.

Langkah 1: Membuat Antarmuka Pengguna

Buka MTViewController.h dan buat dua outlet seperti yang ditunjukkan di bawah ini. Kami akan menggunakan outlet pertama, instance dari UIImageView, untuk menampilkan gambar yang diunduh ke pengguna. Outlet kedua, sebuah instance dari UIProgressView, akan menunjukkan download task.

Buka storyboard utama proyek (Main.storyboard), seret instance UIImageView ke tampilan view controller, dan sambungkan outlet view controller yang baru saja kita buat di file header view controller. Ulangi proses ini untuk tampilan kemajuan.

Configure the application's user interface.Configure the application's user interface.Configure the application's user interface.

Langkah 2: Membuat Download Task

Dalam contoh ini, kami tidak akan menggunakan metode kelas sharedSession, karena kami perlu mengonfigurasi objek session yang akan kami gunakan untuk membuat permintaan. Perbarui implementasi viewDidLoad seperti yang ditunjukkan di bawah ini.

Untuk mencegah peringatan kompiler muncul, pastikan untuk menyesuaikan kelas MTViewController ke protokol NSURLSessionDelegate dan NSURLSessionDownloadDelegate seperti yang ditunjukkan di bawah ini.

Di viewDidLoad, kami membuat instance kelas NSURLSessionConfiguration dengan memanggil metode kelas defaultSessionConfiguration. Seperti yang dinyatakan dalam dokumentasi, dengan menggunakan konfigurasi sesi default, sesi akan berperilaku seperti instance NSURLConnection dalam konfigurasi default, yang tidak apa-apa untuk contoh kita.

Dalam contoh ini, kami membuat instance NSURLSession dengan menjalankan metode kelas sessionWithConfiguration:delegate:delegateQueue  dan meneruskan objek sessionConfiguration yang kami buat beberapa saat yang lalu. Kami menetapkan view controller sebagai delegasi session dan memberikan nil sebagai argumen ketiga. Anda dapat mengabaikan argumen ketiga untuk saat ini. Perbedaan utama dengan contoh sebelumnya adalah bahwa kita menetapkan delegasi session ke view controller.

Untuk mengunduh gambar, kita perlu membuat download task. Kami melakukan ini dengan memanggil downloadTaskWithUR: pada objek session, memasukan sebuah instance NSURL, dan memanggil resume pada download task. Kami bisa menggunakan completion handler seperti yang kami lakukan sebelumnya, tapi saya ingin menunjukkan kepada Anda kemungkinan menggunakan delegasi.

Langkah 3: Implementasi Protokol Delegasi

Untuk membuat semua pekerjaan ini, kita perlu menerapkan tiga metode delegasi dari protokol NSURLSessionDownloadDelegateURLSession:downloadTask:didFinishDownloadingToURL:, URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:, dan URLSession:downloadTask:downloadTaskdidWriteData:totalBytesWritten:totalBytesExpectedToWrite  Implementasi masing-masing metode cukup mudah. Penting untuk dicatat bahwa kita perlu memperbarui antarmuka pengguna pada thread utama menggunakan GCD (Grand Central Dispatch). Dengan melewati nil sebagai argumen ketiga dari sessionWithConfiguration:delegate:delegateQueue operasi membuat antrian latar belakang untuk kita. Ini baik-baik saja, tetapi itu juga berarti bahwa kita perlu menyadari bahwa metode delegasi dipanggil pada thread latar daripada thread utama. Bangun proyek dan jalankan aplikasi untuk melihat hasil kerja keras kami.


Kesimpulan

Dengan dua contoh ini, Anda harus memiliki pemahaman dasar tentang dasar-dasar API NSURLSession, bagaimana perbandingannya dengan NSURLConnection, dan apa kelebihannya. Pada bagian selanjutnya dari seri ini, kita akan melihat fitur-fitur NSURLSession yang lebih lanjut.

Advertisement
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.