jiti-meet/ios
Saúl Ibarra Corretgé 47aa14e9f6 [iOS] Fix syncing muted state with CallKit
Fix the "mute ping pong" for once and for all. This patch takes a new approach
to the problem: it keeps track of the user generated CallKit transaction ations
and avoids calling the delegate method in those cases.

This results in a much cleaner and easier to understand handling of the flow: if
the delegate method is called it means the user tapped on the mute button. When
we sync the muted state in JS with CallKit the delegate method won't be called
at all, thus avoiding the ping-pong altogether.

In addition, make sure all CallKit methods run in the UI thread. CallKit will
call our delegate methods in the UI thread too, thsu there is no need to
synchronize access to the listener / pending action sets.
2018-06-22 11:25:09 +02:00
..
app [RN] Change default WelcomeScreen tab and persist user choice (coding style) 2018-06-18 15:42:09 -05:00
example-pip-app Codying style: naming, formatting, comments 2018-05-03 18:04:59 -05:00
jitsi-meet.xcworkspace [iOS] Add new file created by Xcode 9.3 2018-04-11 10:47:26 +02:00
scripts feat(web/RN): update React to v16 and React Native to 0.49 2017-11-02 14:32:35 +01:00
sdk [iOS] Fix syncing muted state with CallKit 2018-06-22 11:25:09 +02:00
travis-ci fix(ios,build-ipa.sh): lib-jitsi-meet package sed escape (#2953) 2018-05-10 12:46:34 -07:00
Podfile [RN] Update react-native to 0.55.4 2018-06-04 16:05:33 -05:00
Podfile.lock [iOS] Fix crash on startup when fetching calendar entries 2018-06-12 20:38:50 -05:00
README.md [RN] Add Picture-in-Picture support (Coding style: naming, consistency) 2018-02-23 11:21:26 -06:00
apple-app-site-association [iOS] Prepare for App Store release 2016-11-13 18:45:40 -06:00

README.md

Jitsi Meet SDK for iOS

Build

  1. Install all required dependencies.

  2. xcodebuild -workspace ios/jitsi-meet.xcworkspace -scheme JitsiMeet -destination='generic/platform=iOS' -configuration Release archive

Install

After successfully building Jitsi Meet SDK for iOS, copy ios/sdk/JitsiMeet.framework (if the path points to a symbolic link, follow the symbolic link) and node_modules/react-native-webrtc/ios/WebRTC.framework into your project.

API

JitsiMeet is an iOS framework which embodies the whole Jitsi Meet experience and makes it reusable by third-party apps.

To get started:

  1. Add a JitsiMeetView to your app using a Storyboard or Interface Builder, for example.

  2. Then, once the view has loaded, set the delegate in your controller and load the desired URL:

- (void)viewDidLoad {
  [super viewDidLoad];

  JitsiMeetView *jitsiMeetView = (JitsiMeetView *) self.view;

  jitsiMeetView.delegate = self;
  [jitsiMeetView loadURL:nil];
}

JitsiMeetView class

The JitsiMeetView class is the entry point to the SDK. It a subclass of UIView which renders a full conference in the designated area.

delegate

Property to get/set the JitsiMeetViewDelegate on JitsiMeetView.

defaultURL

Property to get/set the default base URL used to join a conference when a partial URL (e.g. a room name only) is specified to loadURLString:/loadURLObject:. If not set or if set to nil, the default built in JavaScript is used: https://meet.jit.si.

NOTE: Must be set (if at all) before loadURL:/loadURLString: for it to take effect.

pictureInPictureEnabled

Property to get / set whether Picture-in-Picture is enabled. Defaults to YES if delegate implements enterPictureInPicture:; otherwise, NO.

NOTE: Must be set (if at all) before loadURL:/loadURLString: for it to take effect.

welcomePageEnabled

Property to get/set whether the Welcome page is enabled. If NO, a black empty view will be rendered when not in a conference. Defaults to NO.

NOTE: Must be set (if at all) before loadURL:/loadURLString: for it to take effect.

loadURL:NSURL

[jitsiMeetView loadURL:[NSURL URLWithString:@"https://meet.jit.si/test123"]];

Loads a specific URL which may identify a conference to join. If the specified URL is nil and the Welcome page is enabled, the Welcome page is displayed instead.

loadURLObject:NSDictionary

[jitsiMeetView loadURLObject:@{
    @"config": @{
        @"startWithAudioMuted": @YES,
        @"startWithVideoMuted": @NO
    },
    @"url": @"https://meet.jit.si/test123"
}];

Loads a specific URL which may identify a conference to join. The URL is specified in the form of an NSDictionary of properties which (1) internally are sufficient to construct a URL (string) while (2) abstracting the specifics of constructing the URL away from API clients/consumers. If the specified URL is nil and the Welcome page is enabled, the Welcome page is displayed instead.

loadURLString:NSString

[jitsiMeetView loadURLString:@"https://meet.jit.si/test123"];

Loads a specific URL which may identify a conference to join. If the specified URL is nil and the Welcome page is enabled, the Welcome page is displayed instead.

Universal / deep linking

In order to support Universal / deep linking, JitsiMeetView offers 2 class methods that you app's delegate should call in order for the app to follow those links.

-  (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
  restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler
{
  return [JitsiMeetView application:application
               continueUserActivity:userActivity
                 restorationHandler:restorationHandler];
}

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
  return [JitsiMeetView application:application
                            openURL:url
                  sourceApplication:sourceApplication
                         annotation:annotation];
}

JitsiMeetViewDelegate

This delegate is optional, and can be set on the JitsiMeetView instance using the delegate property.

It provides information about the conference state: was it joined, left, did it fail?

All methods in this delegate are optional.

conferenceFailed

Called when a joining a conference was unsuccessful or when there was an error while in a conference.

The data dictionary contains an "error" key describing the error and a "url" key with the conference URL.

conferenceJoined

Called when a conference was joined.

The data dictionary contains a "url" key with the conference URL.

conferenceLeft

Called when a conference was left.

The data dictionary contains a "url" key with the conference URL.

conferenceWillJoin

Called before a conference is joined.

The data dictionary contains a "url" key with the conference URL.

conferenceWillLeave

Called before a conference is left.

The data dictionary contains a "url" key with the conference URL.

enterPictureInPicture

Called when entering Picture-in-Picture is requested by the user. The app should now activate its Picture-in-Picture implementation (and resize the associated JitsiMeetView. The latter will automatically detect its new size and adjust its user interface to a variant appropriate for the small size ordinarily associated with Picture-in-Picture.)

The data dictionary is empty.

loadConfigError

Called when loading the main configuration file from the Jitsi Meet deployment fails.

The data dictionary contains an "error" key with the error and a "url" key with the conference URL which necessitated the loading of the configuration file.

Picture-in-Picture

JitsiMeetView will automatically adjust its UI when presented in a Picture-in-Picture style scenario, in a rectangle too small to accommodate its "full" UI.

Jitsi Meet SDK does not currently implement native Picture-in-Picture on iOS. If desired, apps need to implement non-native Picture-in-Picture themselves and resize JitsiMeetView.

If pictureInPictureEnabled is set to YES or delegate implements enterPictureInPicture:, the in-call toolbar will render a button to afford the user to request entering Picture-in-Picture.