capacitor-jitsi-meet 2.1.2-beta.2 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +26 -15
- package/android/README.md +19 -48
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/com/capacitor/jitsi/plugin/Jitsi.java +14 -0
- package/android/src/main/java/com/capacitor/jitsi/plugin/JitsiActivity.java +14 -4
- package/dist/esm/definitions.d.ts +26 -20
- package/dist/esm/web.d.ts +26 -20
- package/dist/esm/web.js.map +1 -1
- package/ios/Plugin/Plugin/JitsiMeetViewController.swift +6 -0
- package/ios/Plugin/Plugin/Plugin.swift +3 -0
- package/ios/README.md +28 -43
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ Each version of the capacitor plugin uses a specific Jitsi SDK version. In iOS d
|
|
|
4
4
|
|
|
5
5
|
See Jitsi-meet SDK [changelog](https://github.com/jitsi/jitsi-meet-release-notes/blob/master/CHANGELOG-MOBILE-SDKS.md)
|
|
6
6
|
|
|
7
|
+
# 2.1.2 (2022-02-08)
|
|
8
|
+
|
|
9
|
+
## iOS
|
|
10
|
+
|
|
11
|
+
- uses Jitsi SDK 4.1.0.
|
|
12
|
+
- [iOS](https://github.com/jitsi/jitsi-meet/releases/tag/ios-sdk-4.1.0)
|
|
13
|
+
|
|
14
|
+
## Android
|
|
15
|
+
|
|
16
|
+
- uses Jitsi SDK 4.1.0.
|
|
17
|
+
- [Android](https://github.com/jitsi/jitsi-meet/releases/tag/android-sdk-4.1.0)
|
|
18
|
+
|
|
7
19
|
# 2.1.1 (2021-12-15)
|
|
8
20
|
|
|
9
21
|
## Android
|
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ This Ionic Capacitor plugin is created to make video calls through the free, ope
|
|
|
29
29
|
v2
|
|
30
30
|
</td>
|
|
31
31
|
<td>
|
|
32
|
-
|
|
32
|
+
<= 1.5.14
|
|
33
33
|
</td>
|
|
34
34
|
<td>
|
|
35
35
|
until Sept 30, 2021
|
|
@@ -63,7 +63,7 @@ This plugin does not currently support web implementation. We recommend using th
|
|
|
63
63
|
|
|
64
64
|
1. npm install capacitor-jitsi-meet
|
|
65
65
|
|
|
66
|
-
2. use it as a Capacitor Plugin
|
|
66
|
+
2. use it as a [Capacitor Plugin](https://capacitorjs.com/docs/getting-started#adding-capacitor-to-your-app)
|
|
67
67
|
|
|
68
68
|
```javascript
|
|
69
69
|
// On Capacitor 3
|
|
@@ -78,18 +78,22 @@ const { Jitsi } = Plugins;
|
|
|
78
78
|
|
|
79
79
|
```javascript
|
|
80
80
|
const result = await Jitsi.joinConference({
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
81
|
+
// required parameters
|
|
82
|
+
roomName: 'room1', // room identifier for the conference
|
|
83
|
+
url: 'https://meet.jit.si', // endpoint of the Jitsi Meet video bridge
|
|
84
|
+
// optional parameters
|
|
85
|
+
token: string, // jwt authentication token
|
|
86
|
+
displayName: string, // user's display name
|
|
87
|
+
email: string, // user's email
|
|
88
|
+
avatarURL: string, // user's avatar url
|
|
89
|
+
startWithAudioMuted: true, // start with audio muted, default: false
|
|
90
|
+
startWithVideoMuted: false, // start with video muted, default: false
|
|
91
|
+
chatEnabled: false, // enable Chat feature, default: true
|
|
92
|
+
inviteEnabled: false, // enable Invitation feature, default: true
|
|
93
|
+
callIntegrationEnabled: true, // enable call integration (CallKit on iOS, ConnectionService on Android), default: true
|
|
94
|
+
recordingEnabled: false, // enable recording feature, default: false
|
|
95
|
+
liveStreamingEnabled: false, // enable live streaming feature, default: false
|
|
96
|
+
screenSharingEnabled: false, // enable screen sharing feature, default: false
|
|
93
97
|
});
|
|
94
98
|
|
|
95
99
|
window.addEventListener('onConferenceJoined', () => {
|
|
@@ -103,11 +107,18 @@ await Jitsi.leaveConference();
|
|
|
103
107
|
|
|
104
108
|
```
|
|
105
109
|
|
|
106
|
-
|
|
107
110
|
3. Build the project
|
|
108
111
|
|
|
112
|
+
```
|
|
113
|
+
$ npm run build
|
|
114
|
+
```
|
|
115
|
+
|
|
109
116
|
4. Follow the deployment instructions for [Android](android/README.md) and [iOS](ios/README.md).
|
|
110
117
|
|
|
118
|
+
## Sample React App for Android
|
|
119
|
+
|
|
120
|
+
You can see a [React Demo App](https://github.com/calvinckho/react-capacitor-jitsi-meet-sample) which runs the Jitsi meeting on the Android device
|
|
121
|
+
|
|
111
122
|
## Feature Requests and Jitsi SDK Customizations
|
|
112
123
|
|
|
113
124
|
I appreciate those who use this plugin in their production apps and are funding this project as sponsors. Your sponsorship enables me to continue to maintain and roll out releases in a timely manner. Consider joining as a sponsor to get first-class support and consultation. For feature requests, create an issue with a label 'feature request'. I also offer paid consultation service to those needing to modify the Jitsi UI interface. To submit a request, create an issue and add the label 'sdk customization'.
|
package/android/README.md
CHANGED
|
@@ -4,51 +4,20 @@ This plugin uses the Jitsi SDK for android. See the plugin [changelog](https://g
|
|
|
4
4
|
|
|
5
5
|
### Usage
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
[Follow installation steps 1-3 here.](https://github.com/calvinckho/capacitor-jitsi-meet#usage)
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
// On Capacitor 3
|
|
11
|
-
import { Jitsi } from 'capacitor-jitsi-meet';
|
|
9
|
+
4. Follow [these steps](https://ionicframework.com/docs/developing/android#project-setup) to add Android to your project
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
import { Plugins } from '@capacitor/core';
|
|
15
|
-
import 'capacitor-jitsi-meet';
|
|
11
|
+
5. Let capacitor sync the projects using either of the following commands
|
|
16
12
|
|
|
17
|
-
const { Jitsi } = Plugins;
|
|
18
13
|
```
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
url: 'https://meet.jit.si' // endpoint of the Jitsi Meet video bridge
|
|
24
|
-
token: string; // jwt authentication token
|
|
25
|
-
displayName: string; // user's display name
|
|
26
|
-
email: string; // user's email
|
|
27
|
-
avatarURL: string; // user's avatar url
|
|
28
|
-
channelLastN: string; // last N participants allowed to join
|
|
29
|
-
startWithAudioMuted: true, // start with audio muted
|
|
30
|
-
startWithVideoMuted: false // start with video muted
|
|
31
|
-
chatEnabled: false, // enable Chat feature
|
|
32
|
-
inviteEnabled: false // enable Invitation feature
|
|
33
|
-
callIntegrationEnabled: true // enable call integration (CallKit on iOS, ConnectionService on Android)
|
|
34
|
-
});
|
|
35
|
-
console.log("join status", result.success);
|
|
36
|
-
|
|
37
|
-
window.addEventListener('onConferenceJoined', () => {
|
|
38
|
-
// do things here
|
|
39
|
-
});
|
|
40
|
-
window.addEventListener('onConferenceLeft', () => {
|
|
41
|
-
// do things here
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
const result: any = await Jitsi.leaveConference();
|
|
45
|
-
console.log("leave status": result.success);
|
|
46
|
-
|
|
14
|
+
npx cap update
|
|
15
|
+
```
|
|
16
|
+
```
|
|
17
|
+
npx cap sync
|
|
47
18
|
```
|
|
48
19
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
3. In your android/build.gradle, add the Maven repository
|
|
20
|
+
6. In your android/build.gradle, add the Maven repository
|
|
52
21
|
|
|
53
22
|
```gradle
|
|
54
23
|
allprojects {
|
|
@@ -62,7 +31,7 @@ allprojects {
|
|
|
62
31
|
}
|
|
63
32
|
```
|
|
64
33
|
|
|
65
|
-
|
|
34
|
+
6. In your android/app/build.gradle file, add Java 1.8 compatibility support
|
|
66
35
|
|
|
67
36
|
```gradle
|
|
68
37
|
android {
|
|
@@ -74,7 +43,7 @@ android {
|
|
|
74
43
|
...
|
|
75
44
|
```
|
|
76
45
|
|
|
77
|
-
|
|
46
|
+
In older capacitor versions, replace the line implementation 'ionic-team:capacitor-android:1+' with:
|
|
78
47
|
|
|
79
48
|
```gradle
|
|
80
49
|
dependencies {
|
|
@@ -83,14 +52,12 @@ dependencies {
|
|
|
83
52
|
}
|
|
84
53
|
```
|
|
85
54
|
|
|
86
|
-
|
|
55
|
+
7. In older capacitor versions, if not already created, follow the [Ionic doc](https://capacitorjs.com/docs/android/updating#from-1-5-1-to-2-0-0) to create common variables.
|
|
87
56
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
Create a android/variables.gradle file with this content
|
|
57
|
+
Create an android/variables.gradle file with this content
|
|
91
58
|
```gradle
|
|
92
59
|
ext {
|
|
93
|
-
minSdkVersion =
|
|
60
|
+
minSdkVersion = 23
|
|
94
61
|
compileSdkVersion = 29
|
|
95
62
|
targetSdkVersion = 29
|
|
96
63
|
androidxAppCompatVersion = '1.1.0'
|
|
@@ -108,9 +75,13 @@ dependencies {
|
|
|
108
75
|
```
|
|
109
76
|
In android/build.gradle file, add apply from: "variables.gradle" as shown [here](https://github.com/ionic-team/capacitor/blob/master/android-template/build.gradle#L18).
|
|
110
77
|
|
|
111
|
-
|
|
78
|
+
9. Build it in Android Studio
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
ionic capacitor open android
|
|
82
|
+
```
|
|
112
83
|
|
|
113
|
-
|
|
84
|
+
10. If upgrading from previous versions of this plugin you may receive this error: `Error: Unfortunately you can't have non-Gradle Java modules and > Android-Gradle modules in one project`. Follow these steps to resolve it:
|
|
114
85
|
|
|
115
86
|
a. In Android Studio Go to File -> Invalidate Caches/Restart.
|
|
116
87
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<application android:theme="@style/AppTheme">
|
|
4
4
|
<activity android:name="com.capacitor.jitsi.plugin.JitsiActivity"
|
|
5
5
|
android:excludeFromRecents="true"
|
|
6
|
-
android:supportsPictureInPicture="
|
|
6
|
+
android:supportsPictureInPicture="false"
|
|
7
7
|
android:resizeableActivity="true"
|
|
8
8
|
android:launchMode="singleTask"
|
|
9
9
|
android:theme="@style/AppTheme.NoActionBar"
|
|
@@ -40,6 +40,9 @@ public class Jitsi extends Plugin {
|
|
|
40
40
|
Boolean chatEnabled = call.getBoolean("chatEnabled");
|
|
41
41
|
Boolean inviteEnabled = call.getBoolean("inviteEnabled");
|
|
42
42
|
Boolean callIntegrationEnabled = call.getBoolean("callIntegrationEnabled");
|
|
43
|
+
Boolean recordingEnabled = call.getBoolean("recordingEnabled");
|
|
44
|
+
Boolean liveStreamingEnabled = call.getBoolean("liveStreamingEnabled");
|
|
45
|
+
Boolean screenSharingEnabled = call.getBoolean("screenSharingEnabled");
|
|
43
46
|
|
|
44
47
|
receiver = new JitsiBroadcastReceiver();
|
|
45
48
|
receiver.setModule(this);
|
|
@@ -72,6 +75,12 @@ public class Jitsi extends Plugin {
|
|
|
72
75
|
if(callIntegrationEnabled == null) {
|
|
73
76
|
callIntegrationEnabled = true;
|
|
74
77
|
}
|
|
78
|
+
if(recordingEnabled == null){
|
|
79
|
+
recordingEnabled = false;
|
|
80
|
+
}
|
|
81
|
+
if(screenSharingEnabled == null){
|
|
82
|
+
screenSharingEnabled = false;
|
|
83
|
+
}
|
|
75
84
|
Timber.tag(TAG).v("display url: %s", url);
|
|
76
85
|
|
|
77
86
|
Intent intent = new Intent(getActivity(), JitsiActivity.class);
|
|
@@ -86,6 +95,11 @@ public class Jitsi extends Plugin {
|
|
|
86
95
|
intent.putExtra("chatEnabled", chatEnabled);
|
|
87
96
|
intent.putExtra("inviteEnabled", inviteEnabled);
|
|
88
97
|
intent.putExtra("callIntegrationEnabled", callIntegrationEnabled);
|
|
98
|
+
intent.putExtra("recordingEnabled", recordingEnabled);
|
|
99
|
+
if(liveStreamingEnabled != null){
|
|
100
|
+
intent.putExtra("liveStreamingEnabled", Boolean.parseBoolean(liveStreamingEnabled));
|
|
101
|
+
}
|
|
102
|
+
intent.putExtra("screenSharingEnabled", screenSharingEnabled);
|
|
89
103
|
|
|
90
104
|
getActivity().startActivity(intent);
|
|
91
105
|
|
|
@@ -61,6 +61,9 @@ public class JitsiActivity extends JitsiMeetActivity {
|
|
|
61
61
|
Boolean chatEnabled = getIntent().getBooleanExtra("chatEnabled", false);
|
|
62
62
|
Boolean inviteEnabled = getIntent().getBooleanExtra("inviteEnabled", false);
|
|
63
63
|
Boolean callIntegrationEnabled = getIntent().getBooleanExtra("callIntegrationEnabled", false);
|
|
64
|
+
Boolean recordingEnabled = getIntent().getBooleanExtra("recordingEnabled", false);
|
|
65
|
+
Boolean liveStreamingEnabled = getIntent().getBooleanExtra("liveStreamingEnabled", false);
|
|
66
|
+
Boolean screenSharingEnabled = getIntent().getBooleanExtra("screenSharingEnabled", false);
|
|
64
67
|
|
|
65
68
|
String displayName = getIntent().getStringExtra("displayName");
|
|
66
69
|
String email = getIntent().getStringExtra("email");
|
|
@@ -93,6 +96,9 @@ public class JitsiActivity extends JitsiMeetActivity {
|
|
|
93
96
|
.setFeatureFlag("chat.enabled", chatEnabled)
|
|
94
97
|
.setFeatureFlag("invite.enabled", inviteEnabled)
|
|
95
98
|
.setFeatureFlag("call-integration.enabled", callIntegrationEnabled)
|
|
99
|
+
.setFeatureFlag("recording.enabled", recordingEnabled)
|
|
100
|
+
.setFeatureFlag("live-streaming.enabled", liveStreamingEnabled)
|
|
101
|
+
.setFeatureFlag("android.screensharing.enabled", screenSharingEnabled)
|
|
96
102
|
//.setAudioOnly(false)
|
|
97
103
|
.setUserInfo(userInfo)
|
|
98
104
|
.build();
|
|
@@ -155,8 +161,12 @@ public class JitsiActivity extends JitsiMeetActivity {
|
|
|
155
161
|
super.onDestroy();
|
|
156
162
|
}
|
|
157
163
|
|
|
158
|
-
//
|
|
159
|
-
|
|
164
|
+
// The following handler is triggered when the app transitions from the background to the foreground.
|
|
165
|
+
// For PIP users, uncomment the code to try PIP mode. Also change android:supportsPictureInPicture="true" in AndroidManifest.xml
|
|
166
|
+
// When PIP is enabled, it can detect when the PIP window is closed by caller so it can terminate the call correctly.
|
|
167
|
+
// TODO: Some users who enabled PIP report that it doesn't always terminate the call correctly.
|
|
168
|
+
// Therefore the PIP mode is disabled in the published plugin until this issue is resolved
|
|
169
|
+
/*@Override
|
|
160
170
|
public void onStop() {
|
|
161
171
|
Timber.d("Picture-in-picture is stopped. Disposing view and finishing activity.");
|
|
162
172
|
if (view != null) {
|
|
@@ -166,9 +176,9 @@ public class JitsiActivity extends JitsiMeetActivity {
|
|
|
166
176
|
}
|
|
167
177
|
on("onConferenceLeft"); // intentionally uses the obsolete onConferenceLeft in order to be consistent with iOS deployment and broadcast to JS listeners
|
|
168
178
|
super.onStop();
|
|
169
|
-
}
|
|
179
|
+
}*/
|
|
170
180
|
|
|
171
|
-
// for logging
|
|
181
|
+
// for logging entering and leaving PIP only
|
|
172
182
|
@Override
|
|
173
183
|
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
|
|
174
184
|
super.onPictureInPictureModeChanged(isInPictureInPictureMode);
|
|
@@ -2,29 +2,35 @@ export interface JitsiPlugin {
|
|
|
2
2
|
joinConference(options: {
|
|
3
3
|
roomName: string;
|
|
4
4
|
url: string;
|
|
5
|
-
token
|
|
6
|
-
channelLastN
|
|
7
|
-
displayName
|
|
8
|
-
email
|
|
9
|
-
avatarURL
|
|
10
|
-
startWithAudioMuted
|
|
11
|
-
startWithVideoMuted
|
|
12
|
-
chatEnabled
|
|
13
|
-
inviteEnabled
|
|
14
|
-
callIntegrationEnabled
|
|
5
|
+
token?: string;
|
|
6
|
+
channelLastN?: string;
|
|
7
|
+
displayName?: string;
|
|
8
|
+
email?: string;
|
|
9
|
+
avatarURL?: string;
|
|
10
|
+
startWithAudioMuted?: boolean;
|
|
11
|
+
startWithVideoMuted?: boolean;
|
|
12
|
+
chatEnabled?: boolean;
|
|
13
|
+
inviteEnabled?: boolean;
|
|
14
|
+
callIntegrationEnabled?: boolean;
|
|
15
|
+
recordingEnabled?: boolean;
|
|
16
|
+
liveStreamingEnabled?: boolean;
|
|
17
|
+
screenSharingEnabled?: boolean;
|
|
15
18
|
}): Promise<{
|
|
16
19
|
roomName: string;
|
|
17
20
|
url: string;
|
|
18
|
-
token
|
|
19
|
-
channelLastN
|
|
20
|
-
displayName
|
|
21
|
-
email
|
|
22
|
-
avatarURL
|
|
23
|
-
startWithAudioMuted
|
|
24
|
-
startWithVideoMuted
|
|
25
|
-
chatEnabled
|
|
26
|
-
inviteEnabled
|
|
27
|
-
callIntegrationEnabled
|
|
21
|
+
token?: string;
|
|
22
|
+
channelLastN?: string;
|
|
23
|
+
displayName?: string;
|
|
24
|
+
email?: string;
|
|
25
|
+
avatarURL?: string;
|
|
26
|
+
startWithAudioMuted?: boolean;
|
|
27
|
+
startWithVideoMuted?: boolean;
|
|
28
|
+
chatEnabled?: boolean;
|
|
29
|
+
inviteEnabled?: boolean;
|
|
30
|
+
callIntegrationEnabled?: boolean;
|
|
31
|
+
recordingEnabled?: boolean;
|
|
32
|
+
liveStreamingEnabled?: boolean;
|
|
33
|
+
screenSharingEnabled?: boolean;
|
|
28
34
|
}>;
|
|
29
35
|
leaveConference(options: {}): Promise<{}>;
|
|
30
36
|
}
|
package/dist/esm/web.d.ts
CHANGED
|
@@ -4,29 +4,35 @@ export declare class JitsiWeb extends WebPlugin implements JitsiPlugin {
|
|
|
4
4
|
joinConference(options: {
|
|
5
5
|
roomName: string;
|
|
6
6
|
url: string;
|
|
7
|
-
token
|
|
8
|
-
channelLastN
|
|
9
|
-
displayName
|
|
10
|
-
email
|
|
11
|
-
avatarURL
|
|
12
|
-
startWithAudioMuted
|
|
13
|
-
startWithVideoMuted
|
|
14
|
-
chatEnabled
|
|
15
|
-
inviteEnabled
|
|
16
|
-
callIntegrationEnabled
|
|
7
|
+
token?: string;
|
|
8
|
+
channelLastN?: string;
|
|
9
|
+
displayName?: string;
|
|
10
|
+
email?: string;
|
|
11
|
+
avatarURL?: string;
|
|
12
|
+
startWithAudioMuted?: boolean;
|
|
13
|
+
startWithVideoMuted?: boolean;
|
|
14
|
+
chatEnabled?: boolean;
|
|
15
|
+
inviteEnabled?: boolean;
|
|
16
|
+
callIntegrationEnabled?: boolean;
|
|
17
|
+
recordingEnabled?: boolean;
|
|
18
|
+
liveStreamingEnabled?: boolean;
|
|
19
|
+
screenSharingEnabled?: boolean;
|
|
17
20
|
}): Promise<{
|
|
18
21
|
roomName: string;
|
|
19
22
|
url: string;
|
|
20
|
-
token
|
|
21
|
-
channelLastN
|
|
22
|
-
displayName
|
|
23
|
-
email
|
|
24
|
-
avatarURL
|
|
25
|
-
startWithAudioMuted
|
|
26
|
-
startWithVideoMuted
|
|
27
|
-
chatEnabled
|
|
28
|
-
inviteEnabled
|
|
29
|
-
callIntegrationEnabled
|
|
23
|
+
token?: string;
|
|
24
|
+
channelLastN?: string;
|
|
25
|
+
displayName?: string;
|
|
26
|
+
email?: string;
|
|
27
|
+
avatarURL?: string;
|
|
28
|
+
startWithAudioMuted?: boolean;
|
|
29
|
+
startWithVideoMuted?: boolean;
|
|
30
|
+
chatEnabled?: boolean;
|
|
31
|
+
inviteEnabled?: boolean;
|
|
32
|
+
callIntegrationEnabled?: boolean;
|
|
33
|
+
recordingEnabled?: boolean;
|
|
34
|
+
liveStreamingEnabled?: boolean;
|
|
35
|
+
screenSharingEnabled?: boolean;
|
|
30
36
|
}>;
|
|
31
37
|
leaveConference(options: {}): Promise<{}>;
|
|
32
38
|
}
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,OAAO,QAAS,SAAQ,SAAS;IAErC,aAAa;IACL,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,OAAO,QAAS,SAAQ,SAAS;IAErC,aAAa;IACL,cAAc,CAAC,OAgBtB;;YAiBG,MAAM,IAAI,CAAC,WAAW,CAAC,kGAAkG,CAAC,CAAC;QAC/H,CAAC;KAAA;IAAA,CAAC;IACA,aAAa;IACT,eAAe,CAAC,OAAW;;YAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,kGAAkG,CAAC,CAAC;QAC/H,CAAC;KAAA;IAAA,CAAC;CACH;AAED,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;AAE7B,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -20,6 +20,9 @@ public class JitsiMeetViewController: UIViewController {
|
|
|
20
20
|
var chatEnabled: Bool = true
|
|
21
21
|
var inviteEnabled: Bool = true
|
|
22
22
|
var callIntegrationEnabled: Bool = true
|
|
23
|
+
var screenSharingEnabled: Bool = false
|
|
24
|
+
var recordingEnabled: Bool = false
|
|
25
|
+
var liveStreamingEnabled: Bool = false
|
|
23
26
|
var email: String? = nil
|
|
24
27
|
var displayName: String? = nil
|
|
25
28
|
var avatarUrl: String? = nil
|
|
@@ -62,6 +65,9 @@ public class JitsiMeetViewController: UIViewController {
|
|
|
62
65
|
builder.setFeatureFlag("chat.enabled", withBoolean: self.chatEnabled)
|
|
63
66
|
builder.setFeatureFlag("invite.enabled", withBoolean: self.inviteEnabled)
|
|
64
67
|
builder.setFeatureFlag("call-integration.enabled", withBoolean: self.callIntegrationEnabled)
|
|
68
|
+
builder.setFeatureFlag("ios.screensharing.enabled", withBoolean: self.screenSharingEnabled)
|
|
69
|
+
builder.setFeatureFlag("ios.recording.enabled", withBoolean: self.recordingEnabled)
|
|
70
|
+
builder.setFeatureFlag("live-streaming.enabled", withBoolean: self.liveStreamingEnabled)
|
|
65
71
|
|
|
66
72
|
builder.userInfo = userInfo
|
|
67
73
|
})
|
|
@@ -38,6 +38,9 @@ public class Jitsi: CAPPlugin {
|
|
|
38
38
|
self.jitsiMeetViewController.displayName = call.options["displayName"] as? String ?? nil
|
|
39
39
|
self.jitsiMeetViewController.avatarUrl = call.options["avatarURL"] as? String ?? nil
|
|
40
40
|
self.jitsiMeetViewController.callIntegrationEnabled = call.options["callIntegrationEnabled"] as? Bool ?? true
|
|
41
|
+
self.jitsiMeetViewController.screenSharingEnabled = call.options["screenSharingEnabled"] as? Bool ?? false
|
|
42
|
+
self.jitsiMeetViewController.recordingEnabled = call.options["recordingEnabled"] as? Bool ?? false
|
|
43
|
+
self.jitsiMeetViewController.liveStreamingEnabled = call.options["liveStreamingEnabled"] as? Bool ?? false
|
|
41
44
|
self.jitsiMeetViewController.delegate = self;
|
|
42
45
|
|
|
43
46
|
DispatchQueue.main.async {
|
package/ios/README.md
CHANGED
|
@@ -10,63 +10,48 @@ See the plugin [changelog](https://github.com/calvinckho/capacitor-jitsi-meet/bl
|
|
|
10
10
|
|
|
11
11
|
### Usage
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
[Follow installation steps 1-3 here.](https://github.com/calvinckho/capacitor-jitsi-meet#usage)
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
// On Capacitor 3
|
|
17
|
-
import { Jitsi } from 'capacitor-jitsi-meet';
|
|
15
|
+
4. Follow [these steps](https://ionicframework.com/docs/developing/ios#project-setup) to add iOS to your project
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
import { Plugins } from '@capacitor/core';
|
|
21
|
-
import 'capacitor-jitsi-meet';
|
|
17
|
+
5. Let capacitor sync the projects using either of the following commands
|
|
22
18
|
|
|
23
|
-
const { Jitsi } = Plugins;
|
|
24
19
|
```
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
url: 'https://meet.jit.si' // endpoint of the Jitsi Meet video bridge
|
|
30
|
-
token: string; // jwt authentication token
|
|
31
|
-
displayName: string; // user's display name
|
|
32
|
-
email: string; // user's email
|
|
33
|
-
avatarURL: string; // user's avatar url
|
|
34
|
-
channelLastN: string; // last N participants allowed to join
|
|
35
|
-
startWithAudioMuted: true, // start with audio muted
|
|
36
|
-
startWithVideoMuted: false // start with video muted
|
|
37
|
-
chatEnabled: false, // enable Chat feature
|
|
38
|
-
inviteEnabled: false // enable Invitation feature
|
|
39
|
-
callIntegrationEnabled: true // enable call integration (CallKit on iOS, ConnectionService on Android)
|
|
40
|
-
});
|
|
41
|
-
console.log("join status", result.success);
|
|
42
|
-
|
|
43
|
-
window.addEventListener('onConferenceJoined', () => {
|
|
44
|
-
// do things here
|
|
45
|
-
});
|
|
46
|
-
window.addEventListener('onConferenceLeft', () => {
|
|
47
|
-
// do things here
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
const result: any = await Jitsi.leaveConference();
|
|
51
|
-
console.log("leave status": result.success);
|
|
52
|
-
|
|
20
|
+
npx cap update
|
|
21
|
+
```
|
|
22
|
+
```
|
|
23
|
+
npx cap sync
|
|
53
24
|
```
|
|
54
25
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
3. Turn off Bitcode in the app target as well as the pod targets. In xcode Project Navigator,
|
|
58
|
-
|
|
26
|
+
6. Turn off Bitcode in the app target as well as the pod targets. In xcode Project Navigator,
|
|
59
27
|
|
|
28
|
+
```
|
|
60
29
|
i. Pods -> Project -> Pods -> Build Settings -> Enable Bitcode -> No
|
|
61
30
|
|
|
62
31
|
ii Pods -> Targets -> CapacitorJitsiMeet -> Build Settings -> Enable Bitcode -> No
|
|
63
|
-
|
|
32
|
+
```
|
|
64
33
|
|
|
65
|
-
|
|
34
|
+
7. Use Swift 5 for the Capacitor target. In Xcode Project Navigator,
|
|
66
35
|
|
|
36
|
+
```
|
|
67
37
|
i. Pods -> Targets -> Capacitor -> Build Settings -> Swift Language Version -> Swift 5
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
8. In order for app to properly work in the background, select the "audio" and "voip" background modes.
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
<key>UIBackgroundModes</key>
|
|
44
|
+
<array>
|
|
45
|
+
<string>audio</string>
|
|
46
|
+
<string>voip</string>
|
|
47
|
+
</array>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
9. Build it in Xcode and deploy it to your device
|
|
68
51
|
|
|
69
|
-
|
|
52
|
+
```
|
|
53
|
+
ionic capacitor open ios
|
|
54
|
+
```
|
|
70
55
|
|
|
71
56
|
### iOS SDK Developer Guide
|
|
72
57
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "capacitor-jitsi-meet",
|
|
3
|
-
"version": "2.1.2
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "This Ionic Capacitor plugin is created to make video calls through the free, open-sourced Jitsi video platform (https://meet.jit.si) on iOS and Android.",
|
|
5
5
|
"main": "dist/esm/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|