Advertisement
  1. Code
  2. iOS SDK

Menjelajahi kerangka Konektivitas Multipeer: Pengaturan Proyek

by
Read Time:23 minsLanguages:

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

Seperti halnya setiap rilis utama, iOS 7 menyertakan banyak API baru yang dapat dimanfaatkan pengembang dalam aplikasi mereka. Dalam tutorial ini, kita akan melihat kerangka baru yang diperkenalkan di iOS 7, kerangka kerja Konektivitas Multipeer. Kerangka kerja ini menambahkan dukungan untuk menemukan, menghubungkan ke, dan berkomunikasi dengan layanan terdekat, seperti perangkat iOS. Dalam tutorial ini, saya akan menunjukkan kepada Anda cara membuat game multi-player sederhana menggunakan kerangka kerja baru ini.

Pengenalan

Berbagai API baru telah diperkenalkan di iOS 7, memberi pengembang peluang dan peluang baru. Kerangka kerja yang menarik perhatian saya adalah kerangka kerja Konektivitas Multipeer. Ini menawarkan sejumlah fitur keren yang ingin saya tunjukkan dalam tutorial ini.

1. Ikhtisar Kerangka Kerja

Sebelum kita mulai bekerja dengan kerangka kerja Konektivitas Multipeer, penting untuk mengenal kerangka kerja terlebih dahulu. Tujuan dari kerangka kerja ini adalah untuk memungkinkan perangkat terdekat untuk berkomunikasi satu sama lain, yang meliputi pertukaran data seperti gambar dan video.

Sangat penting untuk memahami arti istilah terdekat dalam konteks kerangka Konektivitas Multipeer. Kerangka kerja ini mendefinisikan perangkat terdekat sebagai perangkat yang berada di jaringan Wi-Fi yang sama atau dapat berkomunikasi melalui Bluetooth. Kerangka kerja Konektivitas Multipeer tidak dapat digunakan untuk berkomunikasi antar perangkat melalui web, misalnya. Bukan itu yang dirancang untuk kerangka kerja Konektivitas Multipeer.

Sebelum dua perangkat dapat mulai bertukar data, mereka terlebih dahulu harus terhubung satu sama lain. Ini melibatkan dua fase, 1 menemukan perangkat terdekat dan 2 membentuk sesi antara perangkat. Pada fase penemuan, satu perangkat mencari atau menelusuri perangkat di sekitarnya. Jika suatu perangkat ingin ditemukan, itu perlu beriklan sendiri. Ini memungkinkan perangkat penelusuran untuk menemukan perangkat iklan.

Ketika perangkat pertama menemukan perangkat iklan, itu mengirimkan permintaan ke perangkat untuk membuat koneksi, yang dapat diterima atau ditolak oleh pengiklan. Dengan menerima undangan, sesi dibuat, yang berarti perangkat dapat mulai berkomunikasi. Koneksi antara dua perangkat memiliki salah satu dari tiga kemungkinan status, 1 tidak terhubung, 2 menghubungkan, atau 2 terhubung. Kapan saja, perangkat dapat mengakhiri sesi, yang menutup koneksi antara perangkat.

Menjelajah

Kerangka kerja Konektivitas Multipeer menyediakan dua jalan untuk menjelajah perangkat lain. Opsi pertama adalah menggunakan subkelas view controller khusus yang melakukan segalanya untuk Anda. Ini adalah pendekatan yang akan kita gunakan dalam tutorial ini. Mengirim undangan dan membuat sesi sudah siap untuk Anda. Tentu saja, ini tidak cocok untuk setiap kasus. Pilihan lain adalah menerapkan logika secara manual untuk menelusuri perangkat terdekat. Namun, ini adalah topik yang tidak akan kita bahas dalam tutorial ini.

Dalam konteks kerangka Konektivitas Multipeer, perangkat disebut sebagai peer dan setiap peer memiliki pengidentifikasi unik atau peerID dan nama tampilan. Yang terakhir adalah nama yang diberikan pengguna pada perangkatnya, misalnya, "iPhone Gabriel". Nama tampilan adalah informasi penting karena itu satu-satunya cara pengguna mengetahui perangkat mana milik siapa.

Data

Data yang dapat ditransfer antar peer terbatas pada tiga jenis, 1 instance NSData, 2 sumber daya, seperti file dan dokumen, dan 3 data streaming. Dalam tutorial ini, saya akan menunjukkan kepada Anda cara mengirim dan menerima objek data, yaitu, instance NSData. Kami tidak akan membahas sumber daya dan stream dalam tutorial ini.

Data dapat dikirim menggunakan salah satu dari dua mode, reliable mode, yang lebih lambat, tetapi menjamin bahwa data yang dikirim diterima oleh penerima, dan unreliable mode, yang jauh lebih berkinerja, tetapi tidak menjamin bahwa data yang dikirim oleh satu rekan diterima oleh yang lain atau diterima sesuai urutan dikirim. Mode mana yang Anda pilih tergantung pada kebutuhan aplikasi Anda.

Ini semua yang perlu Anda ketahui tentang kerangka Konektivitas Multipeer untuk memulai. Biarkan saya mengakhiri pengantar ini dengan menyebutkan empat kelas yang akan kami kerjakan dalam tutorial ini.

  • MCPeerID: Sebuah instance dari kelas ini mewakili peer dalam sesi multipeer.
  • MCSession: Kelas ini digunakan untuk mengelola komunikasi antar peer dalam satu sesi.
  • MCAdvertiserAssistant: Kelas ini digunakan untuk membantu mengiklankan perr ke perangkat terdekat.
  • MCBrowserViewController: Subclass UIViewController ini menangani penyajian perangkat terdekat kepada pengguna dan membantu membangun sesi multipeer.

2. Ikhtisar Aplikasi

Mari kita lihat contoh aplikasi yang akan kita buat. Tujuan tutorial ini adalah untuk menunjukkan cara membuat koneksi antara perangkat terdekat dan bertukar data, instance NSData, antara perangkat yang terhubung.

Saya yakin Anda bisa memikirkan banyak kasus penggunaan untuk kerangka kerja Konektivitas Multipeer. Namun, dalam tutorial ini, saya memilih game yang sangat sederhana, yang saya beri nama Guess the Secret Number. Dalam game, satu orang memilih nomor dalam rentang yang telah ditentukan yang harus ditebak oleh pemain lain dalam game. Setelah setiap tebakan, host game, orang yang memilih nomor itu, memberi tahu pemain apakah dia menebak dengan benar dan apakah nomor rahasianya lebih tinggi atau lebih rendah. Itu cukup sederhana, bukan?

3. Pengaturan Proyek

Mari kita mulai dengan membuat proyek baru di Xcode seperti yang ditunjukkan di bawah ini. Pilih templat Single View Application dari daftar templat dalam kategori iOS Application dan klik Next.


Beri nama proyek Anda, masukkan pengenal perusahaan, dan pilih iPhone dari menu Devices. Klik tombol Next untuk melanjutkan.


Beri tahu Xcode tempat Anda ingin menyimpan file proyek dan klik tombol Create untuk melanjutkan.


4. Menangani Konektivitas Multipeer

Ada sedikit kode boilerplate yang perlu kita tulis untuk membuat dan mengelola sesi multipeer. Untuk memastikan bahwa kami tidak mengulangi diri kami sendiri, kami akan memusatkan logika ini dalam kelas khusus yang dapat kami gunakan kembali dalam proyek kami. Itu yang akan kita lakukan di bagian ini.

Langkah 1

Buat kelas baru di Xcode dengan memilih New > File ... dari menu File. Pilih Objective-C class dari kategori iOS Cocoa Touch dan klik Next.


Beri nama MPCHandler kelas baru, atur superclass ke NSObject, dan klik tombol Next. Beri tahu Xcode di mana Anda ingin menyimpan file kelas dan tekan Create.


Langkah 2

Buka file header kelas MPCHandler dan mulai dengan menambahkan pernyataan impor untuk kerangka kerja Konektivitas Multipeer seperti yang ditunjukkan di bawah ini.

Sebelum Xcode 5, pertama-tama kita perlu menautkan proyek terhadap kerangka kerja Konektivitas Multipeer. Dalam Xcode 5, bagaimanapun, ini tidak perlu lagi berkat fitur baru kompiler Auto Linking. Kompiler cukup pintar untuk menghubungkan proyek dengan pustaka dan kerangka kerja yang sesuai, yang berarti bahwa kita tidak perlu khawatir tentang hal ini.

Karena kelas MPCHandler akan bertanggung jawab untuk mengelola sesi multipeer, kelas tersebut harus sesuai dengan protokol MCSessionDelegate seperti yang ditunjukkan di bawah ini. Kami juga mendeklarasikan empat properti yang akan membantu kami dengan tugas ini.

Perhatikan bahwa ini adalah kelas yang saya sebutkan sebelumnya dalam tutorial ini. Objek peerID akan mewakili perangkat dan itu juga akan dimasukkan dalam setiap komunikasi antara peer bersama dengan setiap data yang dipertukarkan antara peer. Objek session berisi dan mengelola sesi multipeer. Kami akan berbicara lebih banyak tentang kelas ini nanti dalam tutorial ini. Objek browser memegang referensi ke instance MCBrowserViewController, yang akan kita gunakan untuk menemukan perangkat terdekat dan untuk membuat sesi multipeer di antara mereka. Objek advertiser menangani iklan perangkat serta menangani undangan masuk.

Sebelum kita melihat implementasi dari kelas MPCHandler, kita perlu mendeklarasikan empat metode seperti yang ditunjukkan di bawah ini. Metode pertama, setupPeerWithDisplayName:, menerima satu argumen, tampilan atau nama publik yang akan digunakan untuk perangkat. Metode advertiseSelf: juga membutuhkan satu argumen untuk menunjukkan apakah perangkat harus terlihat oleh perangkat lain. Metode setupSession akan bertugas mengatur sesi multipeer, sedangkan metode setupBrowser akan bertanggung jawab untuk mengatur instance MCBrowserViewController.

Mari kita mulai dengan implementasi metode setupPeerWithDisplayName:. Dalam metode ini, kami membuat turunan dari kelas MCPeerID dan memasukan displayName. Itu dia.

Di setupSession, kami membuat instance MCSession dengan mengirimkan variabel instance peerID dan mengatur delegasi sesi ke instance MPCHandler kami. Penting bagi kami untuk memanggil setupPeerWithDisplayName: sebelum kita mengatur sesi, karena variabel instance peerID tidak boleh nil.

Implementasi setupBrowser tidak bisa lebih mudah. Yang kami lakukan dalam metode ini adalah menginisialisasi instance MCBrowserViewController dengan memasukan tipe layanan dan sesi yang kami buat di setupSession. Argumen pertama adalah jenis layanan untuk dijelajahi. Ini secara unik mengidentifikasi layanan dan harus antara 1 dan 15 karakter. Perhatikan bahwa jenis layanan hanya dapat berisi huruf kecil ASCII, angka, dan tanda hubung. Kami menyimpan referensi ke view controller browser dalam variabel instance _browser.

Di advertiseSelf:, kami menginisialisasi instance dari kelas MCAdvertiserAssistant dengan memasukan tipe layanan yang sama yang kami gunakan untuk inisialisasi instance MCBrowserViewController. Kami juga memasukan objek session dan menetapkan informasi penemuan ke nil karena kami tidak memberikan info penemuan tentang perangkat ke perangkat terdekat selama fase penemuan.

Jika parameter advertise dari advertiseSelf: diatur ke YES, kami memanggil start pada objek MCAdvertiserAssistant untuk memulai asisten dan mulai mengiklankan layanan. Jika advertise diatur ke NO, kami menghentikan asisten pengiklan dan menyetel properti advertiser menjadi nil.

Langkah 3

Anda mungkin telah memperhatikan bahwa Xcode menampilkan beberapa peringatan karena kami belum mengimplementasikan metode MCSessionDelegate yang diperlukan. Mari kita singkirkan peringatan ini dengan mengimplementasikan protokol MCSessionDelegate. Metode yang akan kami terapkan ditunjukkan di bawah ini.

Mari kita lihat pada setiap metode protokol.

  • session:peer:didChangeState: : Metode delegasi ini dipanggil setiap kali kondisi koneksi peer berubah. Ingat bahwa ada tiga kemungkinan keadaan, tidak terhubung, menghubungkan, dan terhubung. Kami akan menggunakan metode delegasi ini untuk melacak peer yang terhubung dan terputus dari game.
  • session:didReceiveData:fromPeer:: Metode ini dipanggil setiap kali perangkat menerima data dari peer lain.
  • session:didStartReceivingResourceWithName:fromPeer:withProgress:: Ketika aplikasi sudah mulai menerima sumber daya, seperti file, dari peer lain, metode ini dipanggil. Kami tidak akan membahas metode ini dalam tutorial ini.
  • session:didFinishReceivingResourceWithName:fromPeer:atURL:withError:: Seperti namanya, metode ini dipanggil ketika sumber daya diterima oleh aplikasi kita.
  • session:didReceiveStream:withName:fromPeer:: Metode ini dipanggil saat aliran diterima oleh aplikasi. Karena kami tidak akan bekerja dengan stream, kami juga tidak akan membahas metode ini.

Meskipun kami tidak akan menggunakan tiga metode delegasi terakhir dalam tutorial ini, kami perlu mengimplementasikannya di view controller kami untuk menghilangkan peringatan kompiler.

Dalam session:peer:didChangeState: dan session:didReceiveData:fromPeer:, kami memposting pemberitahuan menggunakan notification center untuk memastikan bahwa setiap bagian dari aplikasi yang tertarik pada event tersebut dapat diberitahu tentang event tersebut. Ini memungkinkan view controller aplikasi kami untuk menambahkan diri mereka sebagai observer pemberitahuan tersebut dan meresponsnya jika sesuai. Ini juga berarti implementasi metode delegasi ini cukup sederhana seperti yang Anda lihat di bawah ini.

Kita mulai dengan membuat dictionary userInfo notifikasi dan memposting notifikasi dengan memasukkan dictionary sebagai argumen ketiga postNotificationName:object:userInfo:. Perhatikan bahwa kami memposting pemberitahuan di dalam blok dispatch_async untuk memastikan bahwa pemberitahuan tersebut diposting di thread utama. Ini penting karena kami tidak dapat menjamin bahwa metode delegasi dipanggil pada thread utama. notifikasi, bagaimanapun, perlu diposting pada thread utama untuk memastikan bahwa setiap observer menerima notifikasi.

Implementasi session:didReceiveData:fromPeer: terlihat sangat mirip seperti yang Anda lihat di bawah ini.

Kelas MPCHandler siap digunakan, jadi mari kita inisialisasi dalam delegasi aplikasi.

Langkah 4

Buka AppDelegate.h, tambahkan pernyataan impor untuk kelas MPCHandler, dan nyatakan properti tipe MPCHandler.

Beralih ke file implementasi dari kelas AppDelegate dan inisialisasi variabel instance dalam application:didFinishLaunchingWithOptions:.

5. Opsi View Controller

Seperti yang saya sebutkan sebelumnya, aplikasi akan memiliki dua view controller. Templat Single View Application Xcode hanya memiliki satu secara default. Mari menambahkan view controller kedua sekarang. Pilih New > File... dari menu File, pilih Objective-C class dari kategori iOS Cocoa Touch di sebelah kiri, dan klik Next.


Pastikan bahwa kelas baru mewarisi dari UIViewController dan setel bidang Class ke OptionsViewController. Kotak centang harus tetap tidak dicentang. Klik Next untuk melanjutkan.


Beri tahu Xcode tempat Anda ingin menyimpan file kelas dan tekan Create.

6. Membuat Antarmuka Pengguna

Saatnya membuat antarmuka pengguna aplikasi. Buka storyboard utama proyek (Main.storyboard) untuk memulai.

Langkah 1

Pilih view controller di storyboard dan pilih Embed In > Navigation Controller dari menu Editor. Hasilnya adalah view controller tertanam dalam navigation controller dan bilah navigasi ditambahkan ke bagian atas viiew controller.


Pilih bilah navigasi view controller, buka Attributes Inspector di sebelah kanan, dan setel bidang Title ke MPCDemo.


Seret dua instance UIBarButtonItem dari Object Library ke bilah navigasi dan perbarui judulnya seperti yang ditunjukkan di bawah ini.


Ini adalah tampilan yang akan dilihat dan digunakan pemain untuk memasukkan tebakan, mengirimkannya ke pemain lain, dan melacak tebakan sebelumnya yang dibuat dalam suatu game. Untuk memungkinkan semua ini, kita perlu menambahkan bidang teks, dua tombol, dan tampilan teks. Lihatlah screenshot berikutnya untuk klarifikasi. Saya juga menyertakan atribut setiap subview untuk membantu Anda dengan tugas ini.

  • UITextField
    • Frame: X=20, Y=77, lebar=280, tinggi=30
    • Teks Placeholder: Guess a number (1 - 100) ...
  • UIButton
    • Frame: X=254, Y=115, lebar=46, tinggi=30
    • Judul: Send
  • UIButton
    • Frame: X =20, Y=115, lebar=48, tinggi=30
    • Judul: Cancel
  • UITextView
    • Frame: X=20, Y=153, lebar=280, tinggi=395
    • Teks: Nothing (Delete the existing text)
    • Warna latar belakang: Warna abu-abu terang
    • Warna teks: Warna putih
    • Editable: tidak

Beginilah view controller akan terlihat setelah Anda menambahkan empat subview ke view.


Langkah 2

Sebelum kita beralih ke OptionsViewController, mari kita mendeklarasikan dan menghubungkan outlet dan tindakan yang diperlukan di kelas ViewController. Buka ViewController.h dan perbarui kontennya seperti yang ditunjukkan di bawah ini.

Kunjungi kembali main storyboard proyek, pilih instance ViewController, dan hubungkan outlet dan tindakan dengan interface view controller. Jika Anda tidak terbiasa dengan langkah ini, izinkan saya menunjukkan kepada Anda cara kerjanya. Mulailah dengan memperluas scene view controller sehingga Anda dapat melihat objek terkait.


Langkah selanjutnya adalah klik ctrl atau klik kanan objek View Controller - MPCDemo dalam daftar, yang akan memunculkan jendela popup hitam. Di jendela ini, Anda akan melihat gerai dan tindakan yang kami nyatakan sebelumnya serta sejumlah item lainnya. Untuk menghubungkan outlet bidang teks, klik lingkaran di sebelah kanan outlet txtGuess dan seret ke bidang teks di antarmuka pengguna. Garis biru muncul untuk memvisualisasikan koneksi. Lihatlah screenshot berikutnya untuk lebih memahami prosesnya.


Sebelum Anda melanjutkan, pastikan Anda telah menghubungkan setiap outlet dan bertindak ke tampilan yang sesuai di antarmuka pengguna.

Langkah 3

Untuk kelas OptionsViewController kita perlu menambahkan scene baru ke antarmuka. Seret instance UIViewController dari Object Library ke kanvas. Untuk menghubungkannya dengan scene yang ada, klik ctrl atau klik kanan item tombol bar berlabel Options dan seret ke view controller baru. Dari jendela popup hitam muncul, pilih Push dari daftar opsi.



Nama kelas dari scene baru secara default adalah UIViewController, tetapi itu adalah sesuatu yang ingin kami ubah. Di bagian bawah scene kedua, pilih item pertama, buka Identity Inspector di sebelah kanan, dan setel bidang Class ke OptionsViewController di bagian Custom Class.


Pilih bilah navigasi dari opsi view controller, dan atur judul menjadi Options di Attributes Inspector. Tambahkan lima subview ke view controller view seperti yang ditunjukkan di bawah ini.

  • UITextField
    • Frame: X=20, Y=77, lebar=280, tinggi=30
    • Teks Placeholder: Your player name...
  • UISwitch
    • Frame: X=136, Y=141, lebar=51, tinggi=31
  • UIButton
    • Frame: X=76, Y=231, Lebar=168, Tinggi=30
    • Judul: Browse for other players
  • UITextView
    • Frame: X=20, Y=269, Lebar=280, Tinggi=241
    • Teks: Nothing (Delete existing contents)
    • Editable: Tidak
  • UIButton
    • Frame: X=121, Y=518, Lebar=78, Tinggi=30
    • Judul: Disconnect

Screenshot berikutnya harus memberi Anda gambaran tentang bagaimana hasil akhir akan terlihat.


Langkah 4

Untuk menyelesaikan antarmuka opsi view controller, mari deklarasikan beberapa outlet dan tindakan dalam file header view controller. Buka OptionsViewController.h dan perbarui kontennya seperti yang ditunjukkan di bawah ini.

Kunjungi kembali main storyboard proyek dan sambungkan outlet dan tindakan dengan antarmuka pengguna. Kami telah menyelesaikan antarmuka pengguna game dan kami siap untuk mulai menulis beberapa kode untuk melihat kerangka kerja Konektivitas Multipeer.

7. Menemukan Pemain Lain

Langkah selanjutnya adalah mengimplementasikan kelas OptionsViewController, karena kita memerlukan koneksi antara dua perangkat sebelum kita dapat memainkan game dan fokus pada logika game. Saya ingin memulai dengan menunjukkan kepada Anda cara menemukan pemain (perangkat) terdekat dengan menggunakan solusi bawaan kerangka kerja Konektivitas Multipeer.

Langkah 1

Langkah pertama adalah mengambil objek mpcHandler yang kita buat sebelumnya di kelas AppDelegate. Ini menyiratkan bahwa kita perlu mengakses objek mpcHandler melalui delegasi aplikasi. Buka OptionsViewController.m, navigasikan ke bagian atas file, dan tambahkan pernyataan impor untuk file header kelas AppDelegate.

Dalam ekstensi kelas, nyatakan properti yang akan menyimpan referensi ke instance AppDelegate.

Tidak perlu inisialisasi instance AppDelegate karena ini secara otomatis dilakukan selama peluncuran aplikasi. Dalam metode viewDidLoad view controller, kami mengambil referensi ke delegasi aplikasi dan mengatur objek mpcHandler. Kami menginisialisasi properti peerID dan session kelas MPCHandler dengan menerapkan metode yang kami nyatakan dan terapkan sebelumnya dalam tutorial ini.

Di viewDidLoad, kami mengatur peer dengan mengirimkan nama perangkat sebagai nama tampilan. Kami juga menginisialisasi properti session instance MPCHandler yang akan kami gunakan nanti untuk membuat koneksi antara peer. Penting bagi kita untuk melakukan ini setelah menginisialisasi instance MCPeerID, karena sesi membutuhkan objek peerID yang valid selama inisialisasi. Terakhir, kami mengaktifkan advertiseSelf: dan meneruskan status switch di antarmuka pengguna opsi view controller. Keadaan default switch adalah YES, yang berarti bahwa perangkat kami dapat ditemukan oleh perangkat lain.

Langkah 2

Menghadirkan browser view controller semudah mungkin. Namun, properti browser instance MPCHandler perlu diinisialisasi terlebih dahulu. Kami ingin menunjukkan browser view controller ketika pengguna mengetuk tombol Browse for other players. Mari kita implementasikan searchForPlayers: tindakan selanjutnya.

Menyajikan browser view controller memerlukan dua langkah. Pertama, kami memanggil setupBrowser pada objek mpcHandler delegasi aplikasi untuk menginisialisasi instance MCBrowserViewController dan kami kemudian menyajikan instance itu kepada pengguna. Perhatikan bahwa pertama-tama kita memverifikasi apakah objek session instance MPCHandler tidak sama dengan nil, karena objek session digunakan untuk menginisialisasi instance MCBrowserViewController.

Jika Anda menjalankan aplikasi dan mencari pemain lain, Anda akan melihat tampilan yang mirip dengan yang ada di screenshot berikut.


Untuk menguji aplikasi, Anda memerlukan setidaknya dua perangkat, misalnya, Simulator iOS dan perangkat fisik. Untuk membuat screenshot di atas, saya menjalankan aplikasi di iOS Simulator dan pada perangkat asli. Jika Anda mengetuk nama perangkat, perangkat yang dipilih dipindahkan ke bagian berlabel Invitees seperti yang ditunjukkan di bawah ini.


Pada saat yang sama, tampilan peringatan ditampilkan di perangkat kedua, memberi tahu pemain lain bahwa Anda ingin membuat koneksi. Yang diundang dapat menerima atau menolak undangan. Jika pemain menerima undangan, browser membuat koneksi antara kedua perangkat.


Ketika pemain kedua menerima undangan, tombol Done dari pengontrol tampilan browser diaktifkan. Namun, jika Anda mencoba mengetuk tombol Cancel atau Done, Anda akan melihat bahwa tidak ada yang terjadi. Kenapa ini? Penjelasannya sederhana, pertama-tama kita perlu mengimplementasikan protokol MCBrowserViewControllerDelegate di kelas OptionsViewController. Ayo lakukan sekarang. Namun, pertama-tama perbarui tindakan searchForPlayers: dengan menetapkan opsi view controller sebagai delegasi dari browser view controller.

Namun, ini menghasilkan peringatan kompiler lain karena OptionsViewController belum sesuai dengan protokol MCBrowserViewControllerDelegate. Untuk memperbaikinya, buka OptionsViewController.h, impor file header kerangka kerja Multipeer Connectivity, dan buat OptionsViewController sesuai dengan protokol MCBrowserViewControllerDelegate.

Kita perlu mengimplementasikan dua metode protokol MCBrowserViewControllerDelegate untuk mengaktifkan tombol Cancel dan Done. Implementasinya identik, yaitu, mengabaikan browser view controller. Buka file implementasi dari kelas OptionsViewController dan tambahkan dua metode delegasi seperti yang ditunjukkan di bawah ini.

Jika Anda menjalankan aplikasi lagi, Anda akan melihat bahwa tombol Cancel dan Done berfungsi seperti yang diharapkan. Dengan mengetuk tombol Done, koneksi dibuat di belakang layar dan browser view controller diberhentikan.

8. Mendeteksi Perubahan Status Koneksi

Bagian sebelumnya adalah aspek kunci dari kerangka kerja Konektivitas Multipeer. Namun, setelah mengetuk tombol Done, kami tidak melihat adanya perubahan. Mengapa demikian? Selama proses koneksi, perangkat yang menghubungkan transisi dari kondisi Tidak Tersambung ke status Menghubungkan, dan, jika semuanya berjalan dengan baik, akhiri dalam status Tersambung. Sementara transisi ini berlangsung, metode session:peer:didChangeState delegasi kerangka kerja Konektivitas Multipeer dipanggil. Akibatnya, notifikasi khusus yang kami atur di kelas MPCHandler diposting pada setiap perubahan status.

Adalah tugas kami untuk mengamati notifikasi ini dan merespons dengan tepat ketika peer terhubung atau terputus dari perangkat pengguna. Setiap kali kondisi koneksi berubah, selain dari kondisi Connecting, kami akan memperbarui tampilan teks dari kelas OptionsViewController dengan para pemain yang saat ini terhubung ke perangkat pengguna.

Pertama, kita harus menambahkan instance view controller sebagai observer untuk notifikasi MPCDemo_DidChangeStateNotification. Perbarui metode viewDidLoad view controller seperti yang ditunjukkan di bawah ini.

Ingatlah bahwa pemberitahuan dengan nama MPCDemo_DidChangeStateNotification diposkan setiap kali kondisi koneksi peer berubah. Ketika ini terjadi, peerChangedStateWithNotification dari view controller ini dipanggil. Implementasi peerChangedStateWithNotification: tidak sulit seperti yang Anda lihat di bawah. Kami mengekstrak status peer dari dictionary userInfo pemberitahuan dan, jika itu tidak sama dengan MCSessionStateConnecting, kami memperbarui tampilan teks view controller untuk menampilkan status setiap peer.

Seperti namanya, properti connectedPeers dari objek session adalah array yang berisi peer yang terhubung. Kami menggunakan for loop mengulangi array ini dan mengisi tampilan teks dengan nama-nama rekan yang terhubung.

Jalankan dua contoh aplikasi dan buat koneksi untuk melihat hasil pekerjaan kami. Saat Anda sekarang mengetuk Done Selesai, tampilan teks akan menampilkan daftar peer yang terhubung ke perangkat pengguna.


Kesimpulan

Ini membungkusnya untuk bagian pertama tutorial ini tentang kerangka kerja Konektivitas Multipeer. Kami telah membahas beberapa API baru dan meletakkan dasar game kami. Dalam tutorial berikutnya, kami akan terus membangun game dengan menerapkan logika game dan juga mengintegrasikan kerangka kerja Konektivitas Multipeer untuk mengirim data antara pemain game.

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.