Git Product home page Git Product logo

accelerator-sample-apps-ios's Introduction

Accelerator Sample App for iOS

Tokbox is now known as Vonage

Quick start

This app is built using accelerator-core-ios and the following accelerator packs:

Install the project files

Use CocoaPods to install the project files and dependencies.

  1. Install CocoaPods as described in CocoaPods Getting Started.
  2. In Terminal, cd to your project directory and type pod install. (Sometimes, pod update is magical)
  3. Reopen your project in Xcode using the new *.xcworkspace file.

Configure and build the app

Configure the sample app code. Then, build and run the app.

  1. The application requires values for API Key, Session ID, and Token. In the sample, you can get these values at the OpenTok Developer Dashboard. For production deployment, you must generate the Session ID and Token values using one of the OpenTok Server SDKs.

  2. Replace the following empty strings with the corresponding API Key, Session ID, and Token values:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.acceleratorSession = [[OTAcceleratorSession alloc] initWithOpenTokApiKey:<#apikey#>
                                                                            sessionId:<#sessionid#>
                                                                                token:<#token#>];
        return YES;
    }
     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool {
        
        session = OTAcceleratorSession.init(openTokApiKey: <#apikey#>, sessionId: <#sessionid#>, token: <#token#>)
        return true
    }
  3. Use Xcode to build and run the app on an iOS simulator or device.

Exploring the code

This section shows you how to prepare, build, and run the sample application. Example code is added in Objective-C and Swift. With the sample application you can:

For details about developing with the SDK and the APIs this sample uses, see the OpenTok iOS SDK Requirements and the OpenTok iOS SDK Reference.

NOTE: This sample app collects anonymous usage data for internal TokBox purposes only. Please do not modify or remove any logging code from this sample application.

###Call

When the call button is pressed OTMultiPartyCommunicator initiates the connection to the OpenTok session and sets up the listeners for the publisher and subscriber streams:

// start call
[SVProgressHUD show];
__weak MainViewController *weakSelf = self;
[self.multipartyCommunicator connectWithHandler:^(OTCommunicationSignal signal, OTMultiPartyRemote *subscriber, NSError *error) {
    if (!error) {
        [weakSelf handleCommunicationSignal:signal remote:subscriber];
    }
    else {
        [SVProgressHUD showErrorWithStatus:error.localizedDescription];
    }
}];
// start call
SVProgressHUD.show()
multipartyCommunicator.connect {
    [unowned self] (signal, remote, error) in
    
    guard error == nil else {
        SVProgressHUD.showError(withStatus: error!.localizedDescription)
        return
    }
    self.handleCommunicationSignal(signal, remote: remote)
}

The remote connection to the subscriber is handled according to the signal obtained:

- (void)handleCommunicationSignal:(OTCommunicationSignal)signal
                        remote:(OTMultiPartyRemote *)remote {
    switch (signal) {
        case OTPublisherCreated: {  // join a call
            [SVProgressHUD popActivity];
            self.multipartyCommunicator.publisherView.showAudioVideoControl = NO;
            [self.mainView enableControlButtonsForCall:YES];
            [self.mainView connectCallHolder:self.multipartyCommunicator.isCallEnabled];
            [self.mainView addPublisherView:self.multipartyCommunicator.publisherView];
            break;
        }
        case OTSubscriberCreated: { // one participant is ready to join
            [SVProgressHUD show];
        }
        case OTSubscriberReady: {   // one participant joins
            [SVProgressHUD popActivity];
            if (![self.subscribers containsObject:remote]) {
                [self.subscribers addObject:remote];
                [self.mainView updateSubscriberViews:self.subscribers
                                       publisherView:self.multipartyCommunicator.publisherView];
            }
            break;
        }
        case OTSubscriberDestroyed:{    // one participant leaves
            if ([self.subscribers containsObject:remote]) {
                [self.subscribers removeObject:remote];
                [self.mainView updateSubscriberViews:self.subscribers
                                       publisherView:self.multipartyCommunicator.publisherView];
            }
            break;
        }
        ...
    }
}
fileprivate func handleCommunicationSignal(_ signal: OTCommunicationSignal, remote: OTMultiPartyRemote?) {
    switch signal {
    case .publisherCreated: // join a call
        
        guard let multipartyCommunicator = multipartyCommunicator else {break}
        SVProgressHUD.popActivity()
        multipartyCommunicator.publisherView.showAudioVideoControl = false
        mainView.enableControlButtonsForCall(enabled: true)
        mainView.connectCallHolder(connected: multipartyCommunicator.isCallEnabled)
        mainView.addPublisherView(multipartyCommunicator.publisherView)
        
    case .subscriberReady:  // one participant joins
        SVProgressHUD.popActivity()
        if let remote = remote, subscribers.firstIndex(of: remote) == nil {
            subscribers.append(remote)
            mainView.updateSubscriberViews(subscribers, publisherView: multipartyCommunicator?.publisherView)
        }
        
    case .subscriberDestroyed:  // one participant leaves
        if let remote = remote, let index = subscribers.firstIndex(of: remote) {
            subscribers.remove(at: index)
            mainView.updateSubscriberViews(subscribers, publisherView: multipartyCommunicator?.publisherView)
        }
        ...
    }
}

TextChat

The TextCHat feature is built using accelerator-textchat-ios. When the text message button is pressed the view changes to present the chat UI:

- (IBAction)textMessageButtonPressed:(id)sender {
    [self presentViewController:[[TextChatTableViewController alloc] init] animated:YES completion:nil]; //When the text message button is pressed the view changes to present the chat UI
}

The textchat logic and UI is pre-configured, you can also change properties like textChatNavigationBar.topItem.title and alias in TextChatTableViewController:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.textChat = [[OTTextChat alloc] init];
    self.textChat.dataSource = self;
    self.textChat.alias = @"Tokboxer";
    self.textMessages = [[NSMutableArray alloc] init];
    
    self.textChatNavigationBar.topItem.title = self.textChat.alias;
    self.tableView.textChatTableViewDelegate = self;
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.textChatInputView.textField.delegate = self;
    
    __weak TextChatTableViewController *weakSelf = self;
    [self.textChat connectWithHandler:^(OTTextChatConnectionEventSignal signal, OTConnection *connection, NSError *error) {
        if (signal == OTTextChatConnectionEventSignalDidConnect) {
            NSLog(@"Text Chat starts");
        }
        else if (signal == OTTextChatConnectionEventSignalDidDisconnect) {
            NSLog(@"Text Chat stops");
        }
    } messageHandler:^(OTTextChatMessageEventSignal signal, OTTextMessage *message, NSError *error) {
        
        if (signal == OTTextChatMessageEventSignalDidSendMessage || signal == OTTextChatMessageEventSignalDidReceiveMessage) {
            
            if (!error) {
                [weakSelf.textMessages addObject:message];
                [weakSelf.tableView reloadData];
                weakSelf.textChatInputView.textField.text = nil;
                [weakSelf scrollTextChatTableViewToBottom];
            }
        }
    }];
    
    [self.textChatInputView.sendButton addTarget:self action:@selector(sendTextMessage) forControlEvents:UIControlEventTouchUpInside];
}
override func viewDidLoad() {
    super.viewDidLoad()
    
    textChat = OTTextChat()
    textChat?.dataSource = self
    textChat?.alias = "Toxboxer"
    
    textChatNavigationBar.topItem?.title = textChat?.alias
    tableView.textChatTableViewDelegate = self
    tableView.separatorStyle = .none
    textChatInputView.textField.delegate = self
    
    textChat?.connect(handler: { (signal, connection, error) in
        
        guard error == nil else {
            SVProgressHUD.showError(withStatus: error!.localizedDescription)
            return
        }
        
        if signal == .didConnect {
            print("Text Chat starts")
        }
        else if signal == .didDisconnect {
            print("Text Chat stops")
        }
        
    }) { [unowned self](signal, message, error) in
        
        guard error == nil, let message = message else {
            SVProgressHUD.showError(withStatus: error!.localizedDescription)
            return
        }
        
        self.textMessages.append(message)
        self.tableView.reloadData()
        self.textChatInputView.textField.text = nil
        self.scrollTextChatTableViewToBottom()
    }
    
    textChatInputView.sendButton.addTarget(self, action: #selector(sendTextMessage), for: .touchUpInside)
}

ScreenShare

The screen share features shares images from your camera roll using the ScreenShareViewController class which publishes the content.

- (void)startScreenSharing {
    self.multipartyScreenSharer = [[OTMultiPartyCommunicator alloc] initWithView:self.annotationView];
    self.multipartyScreenSharer.dataSource = self;
    
    // publishOnly here is to avoid subscripting to those who already subscribed
    self.multipartyScreenSharer.publishOnly = YES;
    
    __weak ScreenShareViewController *weakSelf = self;
    [self.multipartyScreenSharer connectWithHandler:^(OTCommunicationSignal signal, OTMultiPartyRemote *subscriber, NSError *error) {
        
        if (error) {
            [weakSelf dismissViewControllerAnimated:YES completion:^(){
                [SVProgressHUD showErrorWithStatus:error.localizedDescription];
            }];
            return;
        }
        
        if (signal == OTPublisherCreated) {
            
            weakSelf.multipartyScreenSharer.publishAudio = NO;
            [weakSelf startAnnotation];
        }
    }];
}
fileprivate func startScreenSharing() {
    multipartyScreenSharer = OTMultiPartyCommunicator.init(view: annotationView)
    multipartyScreenSharer?.dataSource = self
    
    // publishOnly here is to avoid subscripting to those who already subscribed
    multipartyScreenSharer?.isPublishOnly = true
    
    multipartyScreenSharer?.connect {
        [unowned self](signal, remote, error) in
        
        guard error == nil else {
            self.dismiss(animated: true) {
                SVProgressHUD.showError(withStatus: error!.localizedDescription)
            }
            return
        }
        
        if signal == .publisherCreated {
            self.multipartyScreenSharer?.isPublishAudio = false
            self.startAnnotation()
        }
    }
}

Annotation

The ScreenShareViewController class also handles local annotation:

The beta version is unstable when it comes to work with cross-platform, it's much stable if two canvas has same aspect ratio.

- (void)startAnnotation {
    self.annotator = [[OTAnnotator alloc] init];
    self.annotator.dataSource = self;
    __weak ScreenShareViewController *weakSelf = self;
    [self.annotator connectWithCompletionHandler:^(OTAnnotationSignal signal, NSError *error) {
        if (error) {
            [weakSelf dismissViewControllerAnimated:YES completion:^(){
                [SVProgressHUD showErrorWithStatus:error.localizedDescription];
            }];
            return;
        }
        
        if (signal == OTAnnotationSessionDidConnect) {
            
            // using frame and self.view to contain toolbarView is for having more space to interact with color picker
            [weakSelf.annotator.annotationScrollView initializeToolbarView];
            weakSelf.annotator.annotationScrollView.toolbarView.toolbarViewDataSource = self;
            weakSelf.annotator.annotationScrollView.toolbarView.frame = weakSelf.annotationToolbarView.frame;
            [weakSelf.view addSubview:weakSelf.annotator.annotationScrollView.toolbarView];
            
            weakSelf.annotator.annotationScrollView.frame = weakSelf.annotationView.bounds;
            weakSelf.annotator.annotationScrollView.scrollView.contentSize = CGSizeMake(CGRectGetWidth(weakSelf.annotator.annotationScrollView.bounds), CGRectGetHeight(weakSelf.annotator.annotationScrollView.bounds));
            [weakSelf.annotationView addSubview:weakSelf.annotator.annotationScrollView];
            
            weakSelf.annotator.annotationScrollView.annotatable = NO;
        }
    }];
}
fileprivate func startAnnotation() {
    annotator = OTAnnotator()
    annotator?.dataSource = self
    annotator?.connect {
        [unowned self] (signal, error) in
        
        guard error == nil else {
            self.dismiss(animated: true) {
                SVProgressHUD.showError(withStatus: error!.localizedDescription)
            }
            return
        }
        
        if signal == .sessionDidConnect {
            
            guard let annotator = self.annotator,
                    let toolbarView = annotator.annotationScrollView.toolbarView else {
                print("Error on launching annotation")
                return
            }
            
            // using frame and self.view to contain toolbarView is for having more space to interact with color picker
            self.annotator?.annotationScrollView.initializeToolbarView()
            toolbarView.toolbarViewDataSource = self
            toolbarView.frame = self.annotationToolbarView.frame
            self.view.addSubview(toolbarView)

            annotator.annotationScrollView.frame = self.annotationView.bounds;
            annotator.annotationScrollView.scrollView.contentSize = CGSize(width: CGFloat(annotator.annotationScrollView.bounds.width), height: CGFloat(annotator.annotationScrollView.bounds.height))
            self.annotationView.addSubview(annotator.annotationScrollView)
            
            annotator.annotationScrollView.isAnnotatable = false
        }
    }
}

Development and Contributing

Interested in contributing? We ❤️ pull requests! See the Contribution guidelines.

Getting Help

We love to hear from you so if you have questions, comments or find a bug in the project, let us know! You can either:

Further Reading

accelerator-sample-apps-ios's People

Contributors

abdulajet avatar jtiet avatar lucashuang0802 avatar marinaserranomontes avatar michaeljolley avatar robjperez avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

accelerator-sample-apps-ios's Issues

crash issue

app is cashed when try to refresh OpenTok Playground or disconnect internet while streaming
but if we disable audio before refresh page or disconnect internet it works fine

screen shot 2017-12-08 at 7 11 23 pm

OTAnnotationKit repository not found

New issue checklist

General information

  • Library version(s):
  • iOS/Android/Browser version(s):
  • Devices/Simulators/Machine affected:
  • Reproducible in the demo project? (Yes/No):
  • Related issues:

Bug report

Cocoapod installation failed.

Expected behavior

... $ pod install

Actual behavior

$ pod install

Analyzing dependencies
Downloading dependencies
Installing LHToolbar (1.3.0-beta)
Installing OTAcceleratorCore (1.0.5)
Installing OTAcceleratorPackUtil (2.0.8)

[!] Error installing OTAcceleratorPackUtil
[!] /usr/bin/git clone https://github.com/opentok/acc-pack-common.git /var/folders/jz/1yy4vh8x7tq1tbtxy8jnghv00000gn/T/d20170420-960-1tll7ba --template= --single-branch --depth 1 --branch 2.0.8

Cloning into '/var/folders/jz/1yy4vh8x7tq1tbtxy8jnghv00000gn/T/d20170420-960-1tll7ba'...
remote: Repository not found.
fatal: repository 'https://github.com/opentok/acc-pack-common.git/' not found

[!] Smart quotes were detected and ignored in your Podfile. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.

Question or Feature Request

... Annotation repository is removed?
Then, how can we check this OpenTok iOS SDK sample?

Thank you

Need your help for implementing annotation

We want to call function " fileprivate func startAnnotation() " from ScreenShareViewController.swift class.
When we are trying to call we getting Fatal error "Fatal error: Attempted to read an unowned reference but the object was already deallocated"
please help on this. we want to implement Annotation.

Opentok Screen Sharing Crashing Sometimes

Opentok Screen Sharing Crashing sometimes

General information

  • Library version(s):
    pod 'OTTextChatAccelerator', '1.0.4'
    pod 'OTAnnotationAccelerator', '= 1.0.0-beta2'
    pod 'SVProgressHUD', '=2.2.1'
    pod 'OTAcceleratorCore', '= 1.1.6'

  • iOS/Android/Browser version(s):
    iOS 12.1

  • Devices/Simulators/Machine affected:
    Device / Simulator

  • Reproducible in the demo project? (Yes/No):
    YES, Sometimes while screen sharing

  • Related issues:
    App Crashing Error - Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior. Issue, Raised with Opentok Ticket Number 29930

Bug report

Expected behavior

It should properly handle stop capturing the screen

Actual behavior

Sometimes its getting crash

Steps to reproduce

Go to screen capture window and do long or short wait or operation

Crash log? Screenshots? Videos? Sample project?

OTScreenCapture.m only as some times very rare we are getting crash (in sample app also) in to one block of code while stopping screen capturing with below mentioned errors

  • (int32_t)stopCapture
    {
    _capturing = NO;

    dispatch_sync(_queue, ^{
    if (_timer) {
    dispatch_source_cancel(_timer);
    }
    });

    return 0;
    }
    M2

Error - Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior

Question or Feature Request

Issue, Raised with Opentok Ticket Number 29930

Sample Swift Project Build Error ( Swift4, XCode10)

New issue checklist

Swift Sample Project Build Error

General information

  • Library version(s): master
  • iOS version: Swift4
  • XCode version: 10
  • Devices/Simulators/Machine affected: All
  • Reproducible in the demo project? (Yes/No): Yes
  • Related issues:

Bug report

Expected behavior

Pod install fetches the framework and I can build project

Actual behavior

I can not build the Project in Xcode 10 and Swift 4

Steps to reproduce

  • Download Sample Project
  • pod install
  • Go in Workspace
  • Build the project

Crash log? Screenshots? Videos? Sample project?

`Showing Recent Messages

Prepare build
note: Using new build systemnote: Planning buildnote: Constructing build description

Build system information

ERROR 1-3:

warning: duplicate output file '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTTextChatAccelerator/OTTextChatAcceleratorBundle.bundle/Info.plist' on task: ProcessInfoPlistFile /Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTTextChatAccelerator/OTTextChatAcceleratorBundle.bundle/Info.plist /Users//Downloads/accelerator-sample-apps-ios-master/AcceleratorSampleApp-Swift/Pods/Target Support Files/OTTextChatAccelerator/ResourceBundle-OTTextChatAcceleratorBundle-Info.plist (in target 'OTTextChatAccelerator-OTTextChatAcceleratorBundle')
Build system information
warning: duplicate output file '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAcceleratorCore/OTAcceleratorCoreBundle.bundle/Info.plist' on task: ProcessInfoPlistFile /Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAcceleratorCore/OTAcceleratorCoreBundle.bundle/Info.plist /Users//Downloads/accelerator-sample-apps-ios-master/AcceleratorSampleApp-Swift/Pods/Target Support Files/OTAcceleratorCore/ResourceBundle-OTAcceleratorCoreBundle-Info.plist (in target 'OTAcceleratorCore-OTAcceleratorCoreBundle')
Build system information
warning: duplicate output file '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAnnotationAccelerator/OTAnnotationAcceleratorBundle.bundle/Info.plist' on task: ProcessInfoPlistFile /Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAnnotationAccelerator/OTAnnotationAcceleratorBundle.bundle/Info.plist /Users//Downloads/accelerator-sample-apps-ios-master/AcceleratorSampleApp-Swift/Pods/Target Support Files/OTAnnotationAccelerator/ResourceBundle-OTAnnotationAcceleratorBundle-Info.plist (in target 'OTAnnotationAccelerator-OTAnnotationAcceleratorBundle')
Build system information
error: Multiple commands produce '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTTextChatAccelerator/OTTextChatAcceleratorBundle.bundle/Info.plist':

  1. Target 'OTTextChatAccelerator-OTTextChatAcceleratorBundle' (project 'Pods') has copy command from '/Users//Downloads/accelerator-sample-apps-ios-master/AcceleratorSampleApp-Swift/Pods/OTTextChatAccelerator/OTTextChatAcceleratorBundle/Info.plist' to '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTTextChatAccelerator/OTTextChatAcceleratorBundle.bundle/Info.plist'
  2. Target 'OTTextChatAccelerator-OTTextChatAcceleratorBundle' (project 'Pods') has process command with output '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTTextChatAccelerator/OTTextChatAcceleratorBundle.bundle/Info.plist'

Build system information
error: Multiple commands produce '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAnnotationAccelerator/OTAnnotationAcceleratorBundle.bundle/Info.plist':

  1. Target 'OTAnnotationAccelerator-OTAnnotationAcceleratorBundle' (project 'Pods') has copy command from '/Users//Downloads/accelerator-sample-apps-ios-master/AcceleratorSampleApp-Swift/Pods/OTAnnotationAccelerator/OTAnnotationAcceleratorBundle/Info.plist' to '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAnnotationAccelerator/OTAnnotationAcceleratorBundle.bundle/Info.plist'
  2. Target 'OTAnnotationAccelerator-OTAnnotationAcceleratorBundle' (project 'Pods') has process command with output '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAnnotationAccelerator/OTAnnotationAcceleratorBundle.bundle/Info.plist'

Build system information
error: Multiple commands produce '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAcceleratorCore/OTAcceleratorCoreBundle.bundle/Info.plist':

  1. Target 'OTAcceleratorCore-OTAcceleratorCoreBundle' (project 'Pods') has copy command from '/Users//Downloads/accelerator-sample-apps-ios-master/AcceleratorSampleApp-Swift/Pods/OTAcceleratorCore/OTAcceleratorCoreBundle/Info.plist' to '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAcceleratorCore/OTAcceleratorCoreBundle.bundle/Info.plist'
  2. Target 'OTAcceleratorCore-OTAcceleratorCoreBundle' (project 'Pods') has process command with output '/Users//Library/Developer/Xcode/DerivedData/AcceleratorSampleApp-Swift-gfaqeotdedgyaoenlfxtncisxwms/Build/Products/Debug-iphoneos/OTAcceleratorCore/OTAcceleratorCoreBundle.bundle/Info.plist'

Error 4:

image

Build failed 24.10.18, 14:27 0.3 seconds

Question or Feature Request

Hello Opentok-Team,

We are a subscribed user of your service and already built an webapp for our customers. We wanted to create an iOS App now but unfortunately we can't build your sample project so we are not able to continue our work. It would be great if anyone of you could look into this issue!

Best

Screen share from web to iOS is not working

New issue checklist

General information

dsada

  • Library version(s):
  • iOS/Android/Browser version(s):
  • Devices/Simulators/Machine affected:
  • Reproducible in the demo project? (Yes/No):
  • Related issues:

Bug report

Expected behavior

...

Actual behavior

...

Steps to reproduce

...

Crash log? Screenshots? Videos? Sample project?

...

Question or Feature Request

...

Need username/ password to run pod install ???

New issue checklist

General information

  • Library version(s):
  • iOS/Android/Browser version(s):
  • Devices/Simulators/Machine affected:
  • Reproducible in the demo project? (Yes/No):
  • Related issues:

Bug report

Expected behavior

...

Actual behavior

...

Steps to reproduce

...

Crash log? Screenshots? Videos? Sample project?

...

Question or Feature Request

...

Screen sharing crash

Current behavior
When switching from CAMERA to SCREEN on android, the app crashes

Steps to reproduce
I'm running fine the conference call between two parties (let's say A and B). I've added a button on my react-native app so that A switches the source from CAMERA to SCREEN. The other side (B) starts receiving the new feed just fine but as soon as (A) does any action (like minimize the app) then (B) sees a frozen video: that would be fine if upon taking back to frontend the app on (A) I was getting again the screen share.
Another problem I'm encountering is that if (A) without leaving the app does something such as clicking on another tab, then on (A) the app crashes.

*Logs info
In Logcat I see NullPointerException during video conference session regarding these lines:
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4300)
at com.opentokreactnative.OTScreenCapturer$1.run(OTScreenCapturer.java:52)

Example Project
--not available

What is the current bug behavior?
App crashes

What is the expected correct behavior?
Screen sharing should remain alive

Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.