137
These are confidential sessions—please refrain from streaming, blogging, or taking pictures Session 708 Nearby Networking with Multipeer Connectivity Demijan Klinc Software Engineer

Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

  • Upload
    others

  • View
    17

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

These are confidential sessions—please refrain from streaming, blogging, or taking pictures

Session 708

Nearby Networkingwith Multipeer Connectivity

Demijan KlincSoftware Engineer

Page 2: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

What Is Multipeer

Connectivity?

Page 3: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking
Page 4: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Facilitates

Discovery of and Communication

with Nearby Devices

Page 5: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking
Page 6: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Data

Page 7: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Data

Page 8: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking
Page 9: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking
Page 10: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Use Cases

• Interactive tutoring• Collaborative document/photo editing• File sharing• Coordination across multiple devices• Sensor data aggregation

Page 11: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Wireless Technologies

Page 12: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Wireless Technologies

Page 13: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Features

•Multiple wireless technologies• Interface selection• Convenience discovery and invitation UI•Message-based and stream-based data•Authentication and encryption

Page 14: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Agenda

• Essentials■ Discovery phase■ Session phase

• Advanced■ Programmatic discovery■ Security

Page 15: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Essentials

Page 16: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Terminology

NearbyWithin range of supported wireless technologies

PeerNearby device

AdvertiserDevice discoverable by other nearby devices

BrowserDevice searching for other nearby devices

Page 17: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Discovery Phase

Page 18: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Demijan

Page 19: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking
Page 20: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff

Page 21: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 22: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 23: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 24: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Invitation

Page 25: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Invitation

Page 26: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 27: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Invitation

Page 28: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 29: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 30: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 31: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 32: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Accept

Accept

Page 33: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff Gabe

Page 34: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Jeff GabeDemijan

Page 35: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Demijan GabeJeff

Page 36: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Data

Demijan Gabe

Jeff

Page 37: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

AdvertiserBrowser

Demijan

PeerID

Session

BrowserView Controller

Jeff

PeerID

Session

AdvertiserAssistant

Page 38: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Advertiser Setup

Jeff

PeerID

Session

AdvertiserAssistant

Page 39: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

TasksAdvertiser

•Make device discoverable• Present invitations to the user•Handle user response• Connect peer to session

PeerID

Session

AdvertiserAssistant

Page 40: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Identify yourself

// initialize local peerMCPeerID *myPeerID = [[MCPeerID alloc] initWithName:@”Jeff”];

MCPeerID

PeerID

Session

AdvertiserAssistant

Page 41: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Define a session

// initializeMCSession *session = [[MCSession alloc] initWithPeer:myPeerID];

// set the delegatesession.delegate = self;

MCSession

PeerID

Session

AdvertiserAssistant

Page 42: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Define a session

// initializeMCSession *session = [[MCSession alloc] initWithPeer:myPeerID];

// set the delegatesession.delegate = self;

MCSession

PeerID

Session

AdvertiserAssistant

Page 43: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

SetupMCAdvertiserAssistant

// initializeMCAdvertiserAssistant *assistant =

[[MCAdvertiserAssistant alloc] initWithServiceType:type discoveryInfo:nil session:session];

// start advertising[assistant start];

PeerID

Session

AdvertiserAssistant

Page 44: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

SetupMCAdvertiserAssistant

// initializeMCAdvertiserAssistant *assistant =

[[MCAdvertiserAssistant alloc] initWithServiceType:type discoveryInfo:nil session:session];

// start advertising[assistant start];

PeerID

Session

AdvertiserAssistant

Page 45: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

PeerID

Session

AdvertiserAssistant

Browser Advertiser

PeerID

Session

BrowserView Controller

Page 46: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Browser Setup

PeerID

Session

BrowserView Controller

Page 47: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

PeerID

Session

BrowserView Controller

Tasks

• Present nearby peers• Send invites•Handle invite responses• Connect peer to session

Browser

Page 48: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

PeerID

Session

BrowserView Controller

MCBrowserViewController

// initializeMCBrowserViewController *browserVC = [[MCBrowserViewController] alloc] initWithServiceType:serviceType session:session];

// set delegate, present browserVC.delegate = self;[self presentViewController:browserVC animated:YES completion:nil];

Page 49: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

MCBrowserViewController

// initializeMCBrowserViewController *browserVC = [[MCBrowserViewController] alloc] initWithServiceType:serviceType session:session];

// set delegate, present browserVC.delegate = self;[self presentViewController:browserVC animated:YES completion:nil];

PeerID

Session

BrowserView Controller

Page 50: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

MCBrowserViewController

// initializeMCBrowserViewController *browserVC = [[MCBrowserViewController] alloc] initWithServiceType:serviceType session:session];

// set delegate, present browserVC.delegate = self;[self presentViewController:browserVC animated:YES completion:nil];

PeerID

Session

BrowserView Controller

Page 51: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

MCBrowserViewControllerDelegate

// done button tapped- (void)browserViewControllerDidFinish: (MCBrowserViewController *)browserVC{ [browserVC dismissViewControllerAnimated:YES completion:nil];}

PeerID

BrowserView Controller

Session

Page 52: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Discovery Phase Class Overview

JeffDemijan

PeerID

Session

AdvertiserAssistant

Browser Advertiser

PeerID

BrowserView Controller

Session

Page 53: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Discovery Phase Class Overview

JeffDemijan

PeerID

Session

AdvertiserAssistant

Browser Advertiser

PeerID

BrowserView Controller

Session

Page 54: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Getting Connected

JeffDemijan

PeerID

Session

AdvertiserAssistant

Browser Advertiser

PeerIDBrowserView Controller

Session

Page 55: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Getting Connected

DemijanSession

AdvertiserAssistant

Browser Advertiser

BrowserView Controller

Session

Page 56: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Getting Connected

DemijanSession

AdvertiserAssistant

Browser Advertiser

BrowserView Controller

Session

Page 57: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Getting Connected

DemijanSession

AdvertiserAssistant

Browser Advertiser

…peer:didChangeState:… …peer:didChangeState:…

BrowserView Controller

Session

Page 58: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session Entry

• Peers connect to a session// session delegate method

- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state;

• Connection successfulstate == MCSessionStateConnected;

• Connection unsuccessful/Invitation declinedstate == MCSessionStateNotConnected;

Page 59: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Discovery Phase Summary

•Advertiser: instantiate, start• Browser: instantiate, present•User-driven

JeffDemijan

PeerID

Session

AdvertiserAssistant

PeerID

Session

BrowserView Controller

Browser Advertiser

Page 60: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session Phase

Page 61: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session

Session

Data

Session

Page 62: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session

Session

Data

Session

Page 63: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Sending Data

Messages Streaming Resources

Page 64: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages Streaming Resources

Page 65: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages

Sender Receiver

Well Defined Boundaries

010010100100101011001001010010010101100010101101011000101011

Page 66: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages

Sender Receiver

Well Defined Boundaries

010010100100101011001001010010010101100010101101011000101011

Page 67: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages

Reliable Mode

• Application critical data• Retransmissions• In order delivery

Page 68: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages

Reliable Mode

• Application critical data• Retransmissions• In order delivery

Unreliable Mode

• Time sensitive data• No delivery guarantees• No order guarantees

Page 69: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages

• Send messagesNSArray *peerIDs = [session connectedPeers];[session sendData:data toPeers:peerIDs withMode:mode error:&error];

• Receive messages- (void) session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID;

Page 70: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages

• Send messagesNSArray *peerIDs = [session connectedPeers];[session sendData:data toPeers:peerIDs withMode:mode error:&error];

• Receive messages- (void) session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID;

Page 71: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages Streaming Resources

Page 72: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Streaming

• Start a streamNSOutputStream *outputStream = [session startStreamWithName:name toPeer:peerID error:&error];

• Receive a stream request- (void) session:(MCSession *)session didReceiveStream:(NSInputStream *)inputStream withName:(NSString *)name fromPeer:(MCPeerID *)peerID;

Page 73: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Streaming

• Start a streamNSOutputStream *outputStream = [session startStreamWithName:name toPeer:peerID error:&error];

• Receive a stream request- (void) session:(MCSession *)session didReceiveStream:(NSInputStream *)inputStream withName:(NSString *)name fromPeer:(MCPeerID *)peerID;

Page 74: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Streaming

• Setup and handle input/output streams// set delegatestream.delegate = self;

// schedule in run loop[stream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

// open stream[stream open]

// implement NSStreamDelegate callbacks

Page 75: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages Streaming Resources

Page 76: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

• Send resourceNSProgress *progress = [session sendResourceAtURL:url withName:name toPeer:peerID completionHandler:completionHandler];

• Control/Query resource transferprogress.fractionCompleted[progress cancel];

Resources

Page 77: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

• Send resourceNSProgress *progress = [session sendResourceAtURL:url withName:name toPeer:peerID completionHandler:completionHandler];

• Control/Query resource transferprogress.fractionCompleted[progress cancel];

Resources

Page 78: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Resources

• Start receiving resource- (void) session:(MCSession *)session didStartReceivingResourceWithName:(NSString *)name fromPeer:(MCPeerID *)peerID withProgress:(NSProgress *)progress;

• Finish receiving resource- (void) session:(MCSession *)session didFinishReceivingResourceWithName:(NSString *)name fromPeer:(MCPeerID *)peerID atURL:(NSURL *)localURL withError:(NSError *)error;

Page 79: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Resources

• Start receiving resource- (void) session:(MCSession *)session didStartReceivingResourceWithName:(NSString *)name fromPeer:(MCPeerID *)peerID withProgress:(NSProgress *)progress;

• Finish receiving resource- (void) session:(MCSession *)session didFinishReceivingResourceWithName:(NSString *)name fromPeer:(MCPeerID *)peerID atURL:(NSURL *)localURL withError:(NSError *)error;

Page 80: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Messages Streaming Resources

Page 81: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session

Session Session

Page 82: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session

Session Session

Page 83: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session Session

Session

Page 84: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session Session

Session

Page 85: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Disconnecting

• Self[session disconnect];

•Others- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state;

state == MCSessionStateNotConnected

Page 86: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Disconnecting

• Self[session disconnect];

•Others- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state;

state == MCSessionStateNotConnected

Page 87: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Session Phase Summary

• Three ways of sending data1. Messages (reliable and unreliable mode)2. Streaming3. Resources

Page 88: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking
Page 89: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…and that’s it!

Page 90: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Advanced

Page 91: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Programmatic Discovery

Page 92: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Programmatic Discovery

•More flexibility• Finding devices/sending invitations handled programmatically• Build a custom UI for discovery

Page 93: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Programmatic Advertising

• InitializationMCNearbyServiceAdvertiser *advertiser =

[[MCNearbyServiceAdvertiser alloc] initWithPeer:myPeerID discoveryInfo:info serviceType:type];

• Start advertisingadvertiser.delegate = self;[advertiser startAdvertisingPeer];

Page 94: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Programmatic Advertising

• InitializationMCNearbyServiceAdvertiser *advertiser =

[[MCNearbyServiceAdvertiser alloc] initWithPeer:myPeerID discoveryInfo:info serviceType:type];

• Start advertisingadvertiser.delegate = self;[advertiser startAdvertisingPeer];

Page 95: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Programmatic Browsing

• InitializationMCNearbyServiceBrowser *browser =

[[MCNearbyServiceBrowser alloc] initWithPeer:myPeerID serviceType:serviceType];

• Start browsingbrowser.delegate = self;[browser startBrowsingForPeers];

Page 96: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Programmatic Browsing

• InitializationMCNearbyServiceBrowser *browser =

[[MCNearbyServiceBrowser alloc] initWithPeer:myPeerID serviceType:serviceType];

• Start browsingbrowser.delegate = self;[browser startBrowsingForPeers];

Page 97: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Advertiser AdvertiserBrowser

Page 98: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…foundPeer:withDiscoveryInfo:…

Advertiser AdvertiserBrowser

Page 99: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…foundPeer:withDiscoveryInfo:…

Advertiser AdvertiserBrowser

!

Page 100: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…foundPeer:withDiscoveryInfo:…

AdvertiserBrowser Advertiser

Page 101: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…foundPeer:withDiscoveryInfo:…

AdvertiserBrowser Advertiser

!

Page 102: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Finding/Losing Peers

• Peer found- (void) browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info;

• Peer lost- (void) browser:(MCNearbyServiceBrowser *)browser lostPeer:(MCPeerID *)peerID;

Page 103: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Finding/Losing Peers

• Peer found- (void) browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info;

• Peer lost- (void) browser:(MCNearbyServiceBrowser *)browser lostPeer:(MCPeerID *)peerID;

Page 104: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Advertiser AdvertiserBrowser

Page 105: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…invitePeer:toSession:…

Advertiser AdvertiserBrowser

Page 106: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…invitePeer:toSession:…

Advertiser AdvertiserBrowser

Page 107: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…didReceiveInvitationFromPeer:… invitationHandler:…

Advertiser AdvertiserBrowser

Page 108: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…didReceiveInvitationFromPeer:… invitationHandler:…

Advertiser AdvertiserBrowser

!

Page 109: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…invitePeer:toSession:…

Advertiser AdvertiserBrowser

Page 110: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…invitePeer:toSession:…

Advertiser AdvertiserBrowser

Page 111: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…didReceiveInvitationFromPeer:… invitationHandler:…

Advertiser AdvertiserBrowser

Page 112: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

…didReceiveInvitationFromPeer:… invitationHandler:…

Advertiser AdvertiserBrowser

!

Page 113: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

invitationHandler(YES,session);

invitationHandler(YES,session);

Advertiser AdvertiserBrowser

Page 114: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

invitationHandler(YES,session);

invitationHandler(YES,session);

Advertiser AdvertiserBrowser

Page 115: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Send/Receive Invitation

• Send invitation[browser invitePeer:peerID toSession:session withContext:context timeout:timeout];

• Receive invitation- (void) advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler;

Page 116: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Send/Receive Invitation

• Send invitation[browser invitePeer:peerID toSession:session withContext:context timeout:timeout];

• Receive invitation- (void) advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler;

Page 117: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Receiving invitationsAdvertiser

- (void) advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler{

}

Page 118: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Receiving invitationsAdvertiser

{// copy and store the invitation handler

// ask the userUIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@”Decline” otherButtonTitles:@”Accept”, nil];

// present alert view[alertView show];

}

Page 119: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Responding to an invitationAdvertiser

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

// retrieve the invitationHandler

// get user decisionBOOL accept = (buttonIndex != alertView.cancelButtonIndex) ? YES : NO;

// respond invitationHandler(accept, session);

}

Page 120: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Getting Connected

Jeff

PeerID

Session

Advertiser

PeerID

Session

Browser

Browser Advertiser

Page 121: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

JeffSession

Advertiser

Session

Browser

Browser Advertiser

Getting Connected

Page 122: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

JeffSession

Advertiser

Session

Browser

Browser Advertiser

Getting Connected

…invitePeer:toSession:… invitationHandler(YES, session);

Page 123: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

JeffSession

Advertiser

Session

Browser

Browser Advertiser

Getting Connected

…peer:didChangeState:… …peer:didChangeState:…

Page 124: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Security

Page 125: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Security

EncryptionAuthentication

Page 126: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Security

EncryptionAuthentication

Page 127: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Authentication

// instantiate with securityMCSession *session = [[MCSession alloc] initWithPeer:myPeerID securityIdentity:identity encryptionPreference:preference];

Page 128: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Authentication

// instantiate with securityMCSession *session = [[MCSession alloc] initWithPeer:myPeerID securityIdentity:identity encryptionPreference:preference];

SecIdentityRef SecCertificateRef SecCertificateRef SecCertificateRef

Certificate ChainIdentity

Page 129: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Authentication

- (void) session:(MCSession *)session didReceiveCertificate:(NSArray *)certificate fromPeer:(MCPeerID *)peerID certificateHandler:(void(^)(BOOL accept))certificateHandler

SecCertificateRef SecCertificateRef SecCertificateRef

Certificate ChainPeer Certificate

SecCertificateRef

Page 130: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Security

EncryptionAuthentication

Page 131: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Encryption

// instantiate with securityMCSession *session = [[MCSession alloc] initWithPeer:myPeerID securityIdentity:identity encryptionPreference:preference];

Page 132: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Encryption

// instantiate with securityMCSession *session = [[MCSession alloc] initWithPeer:myPeerID securityIdentity:identity encryptionPreference:preference];

None RequiredOptional

MCEncryptionPreference

Page 133: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

SummaryAdvanced

• Programmatic discovery■ Want to build custom discovery UI? You can!■ MCNearbyServiceAdvertiser, MCNearbyServiceBrowser

• Security■ Authentication■ Encryption

Page 134: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Some Best Practices

• Start advertising on app launch• Stop advertising when not needed• Stop browsing when done• Keep discovery info short• Keep display names short• Send short unreliable messages for best latency

Page 135: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

More Information

Paul DanboldCore OS [email protected]

DocumentationMultipeer Connectivity Framework Referencehttps://developer.apple.com/library/prerelease/ios

Apple Developer Forumshttp://devforums.apple.com

Page 136: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking

Multipeer Connectivity Lab Core OS Lab BFriday 9:00AM

Foundation Networking Lab Core OS Lab BWednesday11:30AM

Networking Lab Core OS Lab AThursday 9:00AM

Security Lab Core OS Lab BThursday 2:00PM

Labs

Multipeer Connectivity Lab Core OS Lab AWednesday 11:30AM

Page 137: Nearby Networking with Multipeer Connectivity · 2016-07-07 · Multipeer Connectivity Lab Core OS Lab B Friday 9:00AM Foundation Networking Lab Core OS Lab B Wednesday11:30AM Networking