无效访问令牌头Twilio可编程语音响应本机iOS
我正在尝试用react native twilio可编程语音实现语音通话 它从无效访问令牌头Twilio可编程语音响应本机iOS,twilio,react-native-ios,twilio-programmable-voice,Twilio,React Native Ios,Twilio Programmable Voice,我正在尝试用react native twilio可编程语音实现语音通话 它从TwilioVoice.initWithToken(accessToken)中显示就绪状态,但当我调用Twilio.connect()方法时,我在eventlisternerConnectionIDDisconnect方法中得到了无效的访问令牌头。我正在使用React-Native0.61.5和React-Native twilio可编程语音3.21.3 从connectionIDDisconnecteventlist
TwilioVoice.initWithToken(accessToken)
中显示就绪状态,但当我调用Twilio.connect()
方法时,我在eventlisternerConnectionIDDisconnect
方法中得到了无效的访问令牌头。我正在使用React-Native0.61.5
和React-Native twilio可编程语音3.21.3
从connectionIDDisconnect
eventlisterner返回的数据
{
call_sid: ""
call_state: "DISCONNECTED"
error: "Invalid Access Token header"
}
这是我的密码:
import React, { useState, useEffect } from 'react';
import {
View,
Text,
Image,
TouchableOpacity,
Platform,
PermissionsAndroid,
} from 'react-native';
import TwilioVoice from 'react-native-twilio-programmable-voice';
import axios from 'axios';
const Call = () => {
const [callState, setCallState] = useState('');
const [twilioInit, setTwilioInit] = useState(false);
const [name, setName] = useState('');
const [email, setEmial] = useState('');
const [calling, setCalling] = useState(false);
TwilioVoice.addEventListener('connectionDidDisconnect', function(data) {
console.log(data);
});
const getMicrophonePermission = () => {
const audioPermission = PermissionsAndroid.PERMISSIONS.RECORD_AUDIO;
return PermissionsAndroid.check(audioPermission).then(async (result) => {
if (!result) {
const granted = await PermissionsAndroid.request(audioPermission, {
title: 'Microphone Permission',
message:
'App needs access to you microphone ' +
'so you can talk with other users.',
});
}
});
};
const getAuthToken = () => {
const ENDPOINT = 'https://server.com';
return fetch(`${ENDPOINT}/twilioToken`, {
method: 'get',
})
.then((response) => {
return response.json();
})
.then((data) => {
return data.token;
})
.catch((error) => console.log(error));
};
const initlize = async () => {
if (Platform.OS === 'android') {
await getMicrophonePermission();
}
try {
const accessToken = await getAuthToken();
console.log(accessToken);
const success = await TwilioVoice.initWithToken(accessToken);
if (Platform.OS === 'ios') {
TwilioVoice.configureCallKit({
appName: 'eSIM2GO',
});
}
setTwilioInit(success);
} catch (err) {
console.log(err);
}
};
useEffect(() => {
initlize();
}, []);
const handleCall = async () => {
// if (!name && !email) {
// alert('Enter Credetials');
// } else {
// TwilioVoice.connect({ To: 'number' });
// }
TwilioVoice.connect({ To: 'number' });
};
return (
<View
style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#040b2b',
}}
>
<Image
source={require('../../assets/free_calls.png')}
style={{ width: 300, height: 350 }}
/>
<View>
<TouchableOpacity
style={{
marginTop: 30,
backgroundColor: 'rgba(240,97,78, 0.5)',
paddingHorizontal: 100,
paddingVertical: 11,
borderRadius: 22,
}}
onPress={() => handleCall()}
>
<Text
style={{
color: '#fff',
fontFamily: 'Manjari-Regular',
fontSize: 20,
}}
>
{calling ? 'Hang Up' : 'Call'}
</Text>
</TouchableOpacity>
</View>
<View
style={{
marginVertical: 10,
}}
>
<Text
style={{
color: '#fff',
fontSize: 18,
fontFamily: 'Manjari-Regular',
}}
>
{twilioInit ? 'Ready' : 'Not Ready'}
</Text>
</View>
</View>
);
};
export default Call;
我从xcode获得以下日志
provider:didDeactivateAudioSession
请帮忙
提前感谢基本上我所做的就是更改服务器的请求访问令牌。根据文件,请参阅以下代码
$twilioAccountSid='acxxxxxxxxxxx';
$twilioApiKey='skxxxxxxxxxxx';
$twilioApiSecret='xxxxxxxxxxxxx';
//需要语音授权
$OutgoingApplicationId='apxxxxxxxxxxx';
//你的应用程序的标识符-可以是你想要的任何东西
$identity=“john_doe”;
//创建访问令牌,我们将序列化该令牌并将其发送到客户端
$token=新的AccessToken(
$twillioaccountsid,
$twilioApiKey,
$twilioApiSecret,
3600,
$identity
);
//创建语音授权
$voiceGrant=新的voiceGrant();
$voiceGrant->SetOutgoingApplicationId($OutgoingApplicationId);
//可选:添加以允许传入呼叫
$voiceGrant->setIncomingAllow(true);
//向令牌添加授权
$token->addGrant($voiceGrant);
//将令牌呈现为字符串
echo$token->toJWT();
provider:didDeactivateAudioSession