feat(mobile): add webrtc permission grant and allow webrtc service work correct

pull/193/head
moonrailgun 1 year ago
parent 5d39f92f3c
commit 3de7fe2c69

@ -1,8 +1,12 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 这份不需要,应该是默认都有的。但是保留万一有的手机不行还可以手动添加 -->
<!-- <uses-feature android:name="android.hardware.audio.output" />
<uses-feature android:name="android.hardware.microphone" /> -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<application
android:name=".MainApplication"

@ -21,6 +21,7 @@ export const AppMain: React.FC<Props> = React.memo((props) => {
<WebView
ref={webviewRef}
source={{ uri: props.host }}
mediaPlaybackRequiresUserAction={false}
injectedJavaScriptBeforeContentLoaded={generateInjectedScript()}
onMessage={(e) => {
if (!webviewRef.current) {

@ -0,0 +1,22 @@
import { request, check, PERMISSIONS } from 'react-native-permissions';
import { Platform } from 'react-native';
export async function ensureWebRTCPermission() {
const cameraPermission =
Platform.OS === 'ios' ? PERMISSIONS.IOS.CAMERA : PERMISSIONS.ANDROID.CAMERA;
const microphonePermission =
Platform.OS === 'ios'
? PERMISSIONS.IOS.MICROPHONE
: PERMISSIONS.ANDROID.RECORD_AUDIO;
const [cameraPermissionStatus, microphonePermissionStatus] =
await Promise.all([check(cameraPermission), check(microphonePermission)]);
if (microphonePermissionStatus !== 'granted') {
await request(microphonePermission);
}
if (cameraPermissionStatus !== 'granted') {
await request(cameraPermission);
}
}

@ -33,3 +33,7 @@ export function urlResolve(...str: string[]) {
});
return normalize(flatten);
}
export function isDev(): boolean {
return !!__DEV__;
}

@ -1 +1 @@
export * from '../../../packages/types/index';
export * from '../../../packages/types';

@ -23,6 +23,12 @@ export interface SharedEventMap {
*/
loadColorScheme: (schemeName: string) => void;
/**
* webrtc
*
*/
ensureWebRTCPermission: () => void;
/**
*
*/

@ -23,6 +23,7 @@ regCustomPanel({
});
forwardSharedEvent('loadColorScheme');
forwardSharedEvent('ensureWebRTCPermission');
forwardSharedEvent('loginSuccess', async (payload) => {
let token = window.localStorage.getItem('jsonwebtoken');
try {

@ -1,6 +1,6 @@
import { showErrorToasts, useEvent } from '@capital/common';
import { sharedEvent, showErrorToasts, useEvent } from '@capital/common';
import { withKeepAliveOverlay } from '@capital/component';
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import type { LocalUserChoices } from '@livekit/components-react';
import { PreJoinView } from './lib/PreJoinView';
import { LivekitContainer } from './LivekitContainer';
@ -56,9 +56,13 @@ export const PureLivekitView: React.FC<PureLivekitViewProps> = React.memo(
const handleError = useEvent((err: Error) => {
showErrorToasts('error while setting up prejoin');
console.log('error while setting up prejoin', err);
console.error('error while setting up prejoin', err);
});
useEffect(() => {
sharedEvent.emit('ensureWebRTCPermission');
}, []);
const handleJoin = useEvent(async (userChoices: LocalUserChoices) => {
await props.onJoin?.();

Loading…
Cancel
Save