React Native导入Facebook图片

问题描述 投票:0回答:2

如何获取用户ID邮件图片等?图片非常重要。我已经尝试了不同的例子,但它们没有用。我想在第二个屏幕上显示图片,但目前不是那么重要。我是新手,并不知道该怎么做。

  import React from 'react';
  import {
    StyleSheet,
    Text,
    View,
    Button,
    Alert,
    TouchableOpacity,
    TextInput,
    Switch,
    Image
  } from 'react-native';
  import EStyleSheet from 'react-native-extended-stylesheet';
  import { LoginManager,LoginButton,AccessToken,GraphRequest,GraphRequestManager} from 'react-native-fbsdk';
  import { createStackNavigator } from 'react-navigation';
  import * as firebase from 'firebase';


  EStyleSheet.build({
      $textColor: 'white'
    });


  export default class HomeScreen extends React.Component {
      constructor(props){
          super(props);
          this.state = {userInfo: null,};
      }
      static navigationOptions = {
          title: "Socialmedia", 
      };
      renderImage(){

            console.log(this.state.userInfo);
            this.render(
              <View>
                <Image source={{url: this.state.userInfo.photoURL}} />
              </View>
            )
      }
      //Facebook login
      async loginWithFacebook() {
    try {
      const {
        type,
        token,
        expires,
        permissions,
        declinedPermissions,
      } = await Expo.Facebook.logInWithReadPermissionsAsync('262997934355158', {
        permissions: ['public_profile'],
      });
      if (type === 'success') {
        const credential = firebase.auth.FacebookAuthProvider.credential(token)
        //this.props.navigation.navigate('Second', {});
        firebase.auth().signInAndRetrieveDataWithCredential(credential).catch((error) => {
          console.log(error)
        })
        // Get the user's name using Facebook's Graph API
        const response = await fetch(`https://graph.facebook.com/me?access_token=${token}&fields=id,name,picture,type(large)`);
        const userInfo = await response.json();
        this.setState({userInfo});
        this.renderImage();
      } else {
        // type === 'cancel'
      }
    } catch ({ message }) {
      alert(`Facebook Login Error: ${message}`);
    }
  }
  //Google login
        async loginWithGoogle() {
          const { type, token } = await await Expo.Google.logInAsync({
              //androidClientId: YOUR_CLIENT_ID_HERE,
              iosClientId: '258088831368-h42kgsqarctlpuaugksgqeh6plkh0ese.apps.googleusercontent.com',
              scopes: ['profile', 'email'],
            });
          if (type == 'success') {
            const credential = firebase.auth.GoogleAuthProvider.credential(token)
            firebase.auth().signInAndRetrieveDataWithCredential(credential).catch((error) => {
              console.log(error)
            })
          }
        }
        //339771303079-3mse4b0pvur499bof3ri61heahjtsj9f.apps.googleusercontent.com
      render() {
          return(
          <View style={styles.container}>
              <View style={styles.container}><TouchableOpacity style={[styles.buttons, {backgroundColor: '#3b5998'}]} onPress={this.loginWithFacebook.bind(this)}>
              <Image style={styles.img} source={require("../assets/Facebook.png")}/><Text style={{left: 20, color: 'white'}}>Facebook</Text>
              </TouchableOpacity></View>
              <View style={styles.container}><TouchableOpacity style={styles.buttons} onPress={() => this.loginWithGoogle()}>
              <Image style={styles.img} source={require("../assets/Google.png")}/><Text style={{left: 20}}>Login with Google</Text>
              </TouchableOpacity></View>
              <View style={styles.container}><TouchableOpacity style={styles.buttons}>
              <Text>Github</Text>
              </TouchableOpacity></View>
              <View style={styles.container}><TouchableOpacity style={styles.buttons}>
              <Text>Play Spiele</Text>
              </TouchableOpacity></View>
              <View style={styles.container}><TouchableOpacity style={styles.buttons}>
              <Text>Twitter</Text>
              </TouchableOpacity></View>
          </View>
          );
      }
  }
  })

这是调试消息:{error:{...}}错误:{message:“语法错误”字符串的预期结束而不是“(”。“字符20:id,name,picture,type(large)”,类型: “OAuthException”,代码:2500,fbtrace_id:“DXFuk9C8gdT”} proto:Objec

android ios facebook react-native login
2个回答
0
投票

语法错误告诉您API调用有问题:

错误

picture,type(large)

正确

picture.type(large)

顺便说一下,你可以(并且应该)首先在API Explorer中尝试API调用:https://developers.facebook.com/tools/explorer/


0
投票

你不需要额外的请求。

只需这样做。

firebase.auth().signInAndRetrieveDataWithCredential(credential)
.then(data => {
  let {photoURL} = data.user
  // now you got the photoURL
  // to retrieve different sizes of photo url simply do
  let largerImage = photoURL+"?height=600"
})

一个简单的要求。

height = 600将调整照片大小取决于原始照片的宽度和高度属性,并返回适当大小的图像。它将返回600以上但不低于。因为图像可能不是方形格式。

© www.soinside.com 2019 - 2024. All rights reserved.