0

我试图从react原生应用程序接收谷歌任务列表。

我创建了一个新应用程序:

npx反应主动初始化谷歌任务应用程序

添加了程序包:

npm安装@react-native-google-signin/google-signin axios

并重写附录tsx:

从“React”导入React,{useEffect,useState};从“react-native”导入{View、Button、Text、FlatList};进口{谷歌登录,状态代码,}来自“@react-native-google-signin/google-signin”;从“axios”导入axios;常量GOOGLE_WEB_CLIENT_ID=“38819132xxxxxxxxxxxxxxxxxxxxxxxlogleusercontent.com”;常量GOOGLE_ANDROID_CLIENT_ID=“38819132xxxxxxxxxxxxxx.googleusercontent.com”;常量应用程序=()=>{const[userInfo,setUserInfo]=useState(空);const[tasks,setTasks]=useState([]);使用效果(()=>{谷歌登录.configure({作用域:['https://www.googleapis.com/auth/tasks','https://www.googleapis.com/auth/calendar网址',],webClientId:GOOGLE_WEB_CLIENT_ID,});}, []);const signIn=异步()=>{尝试{等待GoogleSignin.hasPlayServices();const userInfo=等待GoogleSignin.signIn();setUserInfo(用户信息);fetchTasks(userInfo.idToken);}捕获(错误){console.log(“错误:”,错误);if(error.code===statusCodes.SIGN_IN_CANCELLED){console.log('用户取消了登录流');}else if(error.code===statusCodes.IN_PROGRESS){console.log('登录已在进行中');}else if(error.code===statusCodes.PLAY_SERVICES_NOT_AVAILABLE){console.log(“播放服务不可用或过时”);}其他{console.log('发生了其他错误:',error);}}};const fetchTasks=异步令牌=>{尝试{const响应=等待axios.get('https://www.googleapis.com/tasks/v1/users/@我/列表',{标头:{授权:`Bearer${token}`},},);setTasks(response.data.items);}捕获(错误){console.log('获取任务时出错:',错误);}};返回(<视图样式={{flex:1,justifyContent:“中心”,alignItems:“中心”}>{userInfo(<视图>欢迎,{userInfo.user.name}<平面列表数据={任务}keyExtractor={item=>item.id}renderItem={({item})=><Text>{item.title}</Text>}/></查看>) : (<><Button title=“使用谷歌登录”onPress={signIn}/></>)}</查看>);};导出默认应用程序;

我可以接收用户数据,但当我尝试获取任务列表时,我得到了一个带有此标记的http 401错误。

任务API在Google控制台中启用。我为web创建了OAuth凭据,Android尝试使用它-相同的http 401错误。

我需要使用什么类型的api_key来获取任务列表?我需要在谷歌控制台中更改什么才能使其正常工作?

1答案1

重置为默认值
0

GoogleSignin.signIn()返回autorisationToken要向google api发出请求,需要使用accessToken可以使用命令const-tokens=await-GoogleSignin.getTokens()接收它;

新工作代码:

...等待GoogleSignin.hasPlayServices();const userInfo=等待GoogleSignin.signIn();设置用户信息(userInfo);const tokens=等待GoogleSignin.getTokens();fetchTasks(tokens.accessToken);...

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.