Slide 1

Slide 1 text

in Multipeer Connectivity Jay Thrash [360|iDev min] October 2014 Adventures Adventures

Slide 2

Slide 2 text

Overview Lifecycle Implement Demo

Slide 3

Slide 3 text

Multipeer Connectivity Overview

Slide 4

Slide 4 text

Multipeer Connectivity Overview What does it do?

Slide 5

Slide 5 text

“A framework for discovering services provided by, and communicating with, nearby iOS devices” Multipeer Connectivity Overview - WWDC, June 2013

Slide 6

Slide 6 text

“A framework for discovering services provided by, and communicating with, nearby iOS and OS X devices” Multipeer Connectivity Overview - WWDC, June 2014

Slide 7

Slide 7 text

Multipeer Connectivity Overview What does it do? No, really…

Slide 8

Slide 8 text

“A framework for creating an ad-hoc network of nearby iOS & OS X devices” Multipeer Connectivity Overview - Me, just now

Slide 9

Slide 9 text

Multipeer Connectivity Overview Wi-Fi Bluetooth Peer-to-Peer Wi-Fi R.Y.O.N.N.

Slide 10

Slide 10 text

Multipeer Connectivity Overview Wi-Fi Bluetooth Peer-to-Peer Wi-Fi R.Y.O.N.N. It’s Magic!

Slide 11

Slide 11 text

“A framework for creating an ad-hoc network of that allows nearby iOS & OS X devices to communicate” Multipeer Connectivity Overview - Me, (again), just now

Slide 12

Slide 12 text

Multipeer Connectivity Overview Why does it matter?

Slide 13

Slide 13 text

✉️ ✉️ ✉️ Multipeer Connectivity Overview ✉️

Slide 14

Slide 14 text

✉️ ✉️ ✉️ Multipeer Connectivity Overview ✉️ ☁

Slide 15

Slide 15 text

✉️ ✉️ ✉️ Multipeer Connectivity Overview ✉️

Slide 16

Slide 16 text

✉️ ✉️ ✉️ Multipeer Connectivity Overview

Slide 17

Slide 17 text

✉️ ✉️ ✉️ Multipeer Connectivity Overview

Slide 18

Slide 18 text

Multipeer Connectivity Overview MOREEfficient Secure

Slide 19

Slide 19 text

Multipeer Connectivity Overview

Slide 20

Slide 20 text

Multipeer Connectivity Lifecycle

Slide 21

Slide 21 text

Multipeer Connectivity Lifecycle Advertise Discover Invite Connect Communicate

Slide 22

Slide 22 text

Multipeer Connectivity Lifecycle Advertise Discover Invite Connect Communicate

Slide 23

Slide 23 text

Multipeer Connectivity Lifecycle Advertise Discover Invite Connect Communicate ? ?

Slide 24

Slide 24 text

Multipeer Connectivity Lifecycle Advertise Discover Invite Connect Communicate ✅ ✅

Slide 25

Slide 25 text

Multipeer Connectivity Lifecycle Advertise Discover Invite Connect Communicate

Slide 26

Slide 26 text

Multipeer Connectivity Lifecycle Advertise Discover Invite Connect Communicate

Slide 27

Slide 27 text

Multipeer Connectivity Implement

Slide 28

Slide 28 text

Multipeer Connectivity Implement @import MultipeerConnectivity; Step 0: Import Framework

Slide 29

Slide 29 text

Multipeer Connectivity Implement MCPeerID peerID = [[MCPeerID alloc] initWithDisplayName:peerName]; Step 1: Create Identity

Slide 30

Slide 30 text

Multipeer Connectivity Implement MCSession session = [[MCSession alloc] initWithPeer:peerID]; Step 2: Create Session

Slide 31

Slide 31 text

Multipeer Connectivity Implement MCAdvertiserAssistant advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:serviceType discoveryInfo:nil session:session]; advertiser.delegate = self; [advertiser start]; Step 3: Advertise

Slide 32

Slide 32 text

Multipeer Connectivity Implement MCBrowserViewController browser = [[MCBrowserViewController alloc] initWithServiceType:serviceType session:session]; browser.minimumNumberOfPeers = min; browser.maximumNumberOfPeers = max; browser.delegate = self; [self presentViewController:browser ...]; Step 4: Discover

Slide 33

Slide 33 text

Multipeer Connectivity Implement MCSession Step 5: Communicate Message Stream Resources

Slide 34

Slide 34 text

Multipeer Connectivity Implement MCSession // Send Message [session sendData:messageData toPeers:@[peerID,peerID,peerID,…] withMode:MCSessionSendDataReliable error:&error]; // MCSessionSendDataReliable is faster, but… // delivery is not guaranteed // nor is order Step 5: Communicate

Slide 35

Slide 35 text

Multipeer Connectivity Implement MCSessionDelegate // Receive Message -(void) session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID { // Unarchive data to object } Step 5: Communicate

Slide 36

Slide 36 text

Multipeer Connectivity Implement MCSession // Create Stream NSOutputStream *stream = [session startStreamWithName:streamName toPeer:peerID error:&error] // write to stream Step 5: Communicate

Slide 37

Slide 37 text

Multipeer Connectivity Implement MCSessionDelegate // Receive on stream - (void)session:(MCSession *)session didReceiveStream:(NSInputStream *)stream withName:(NSString *)name fromPeer:(MCPeerID *)peerID Step 5: Communicate

Slide 38

Slide 38 text

Multipeer Connectivity Implement MCSession // Send resource NSProgress *progress = [session sendResourceAtURL:url withName:name toPeer:peerID completionHandler:completionHandler]; // controlling transfer progress.fractionCompleted; [progress cancel]; Step 5: Communicate

Slide 39

Slide 39 text

Multipeer Connectivity Implement MCSessionDelegate // Receiving Resource - (void)session:(MCSession *)session didStartReceivingResourceWithName:(NSString *) resourceName:(NSString *) fromPeer:(MCPeerID *)peerID withProgress:(NSProgress *) prg Step 5: Communicate

Slide 40

Slide 40 text

Multipeer Connectivity Implement MCSessionDelegate // Received Resource (void)session:(MCSession *) sessiondidFinishReceivingResourceWithName:(NSString*) resourceName fromPeer:(MCPeerID *)peerID atURL:(NSURL *)localURL withError:(NSError *)error { // completed transfer } Step 5: Communicate

Slide 41

Slide 41 text

Multipeer Connectivity Implement MCSession // Leave Session [session disconnect]; Step 5: Connection Status

Slide 42

Slide 42 text

Multipeer Connectivity Implement MCSessionDelegate // Someone left the session -(void) session:(MCSession *) peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state; { // MCSessionStateNotConnected // MCSessionStateConnecting // MCSessionStateConnected } Step 5: Connection Status

Slide 43

Slide 43 text

Multipeer Connectivity Implement MCSession // handle changes on the main thread dispatch_async(dispatch_get_main_queue(), ^{ [self doThingWithData]; }); Step 5: Communicate !

Slide 44

Slide 44 text

D V M Multipeer Connectivity

Slide 45

Slide 45 text

D V M emo inimum iable Multipeer Connectivity

Slide 46

Slide 46 text

Multipeer Connectivity Demo

Slide 47

Slide 47 text

Multipeer Connectivity Demo Bob Mary Bob Mary Jay

Slide 48

Slide 48 text

Multipeer Connectivity Demo Bob Mary Bob Mary Jay

Slide 49

Slide 49 text

Multipeer Connectivity Demo Bob Mary Jay

Slide 50

Slide 50 text

Multipeer Connectivity Demo Bob Mary Jay

Slide 51

Slide 51 text

Multipeer Connectivity Demo Bob Mary Jay

Slide 52

Slide 52 text

Multipeer Connectivity Demo Bob Mary Jay

Slide 53

Slide 53 text

Multipeer Connectivity Demo

Slide 54

Slide 54 text

Extra Credit Some things we didn’t cover •Programmatic advertising, discovery and session joining (app specific) •Streaming data •Sending resources !

Slide 55

Slide 55 text

Higher Learning Topics to Google •NSHipster •WWDC 2013 (Talk 708) •WWDC 2014 (Talk 709) •objc.io #8 Quadcopter Project •Apple Docs (MP Framework)

Slide 56

Slide 56 text

@jaythrash [email protected] http://jaythrash.com/talks

Slide 57

Slide 57 text

Thanks! @jaythrash [email protected] http://jaythrash.com/talks