如何获取用户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
语法错误告诉您API调用有问题:
错误
picture,type(large)
正确
picture.type(large)
顺便说一下,你可以(并且应该)首先在API Explorer中尝试API调用:https://developers.facebook.com/tools/explorer/
你不需要额外的请求。
只需这样做。
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以上但不低于。因为图像可能不是方形格式。