token
и сохранение его в AsyncStorage
Хорошо, код, который вы написали, в основном правильный. Вы успешно получили токен доступа. Он возвращается к вам, когда вы делаете запрос Expo.Facebook.logInWithReadPermissionsAsync
. Получив его, вы можете сохранить его в Redux или AsyncStorage для дальнейшего использования.
logIn = async () => {
let appID = '123456789012345' // <- you'll need to add your own appID here
try {
const {
type,
token, // <- this is your access token
expires,
permissions,
declinedPermissions,
} = await Expo.Facebook.logInWithReadPermissionsAsync(appID, { permissions: ['public_profile', 'email'], });
if (type === 'success') {
// Get the user's name using Facebook's Graph API
const response = await fetch(`https://graph.facebook.com/me/?fields=id,name&access_token=${token}`); //<- use the token you got in your request
const userInfo = await response.json();
alert(userInfo.name);
// you could now save the token in AsyncStorage, Redux or leave it in state
await AsyncStorage.setItem('token', token); // <- save the token in AsyncStorage for later use
} else {
// type === 'cancel'
}
} catch ({ message }) {
alert(`Facebook Login Error: ${message}`);
}
}
app.json
Также не забудьте добавить следующее к вашему app.json
, очевидно, заменив значения вашими. Вы получите их, зарегистрировав свое приложение в Facebook, вы можете узнать об этом здесь https://docs.expo.io/versions/latest/sdk/facebook/#registering-your-app-with-facebook [1116 ]
{
"expo": {
"facebookScheme": "fb123456789012345",
"facebookAppId": "123456789012345", // <- this is the same appID that you require above when making your initial request.
"facebookDisplayName": "you_re_facebook_app_name",
...
}
}
token
из AsyncStorage
Тогда, если вы захотите сделать еще один запрос позже, у вас может быть функция, аналогичная этой, где вы получите [1111 ] из AsyncStorage
, а затем используйте его для отправки запроса.
makeGraphRequest = async () => {
try {
let token = await AsyncStorage.getItem('token'); // <- get the token from AsyncStorage
const response = await fetch(`https://graph.facebook.com/me/?fields=id,name&access_token=${token}`); // <- use the token for making the graphQL request
const userInfo = await response.json();
alert(userInfo.name)
} catch (err) {
alert(err.message)
}
}
Я бы сделал закуску, чтобы показать вам, как это работает, однако, закуски не позволяют редактировать файл app.json
(насколько я могу судить). Итак, вот что вы могли бы заменить своим App.js
, а затем, если вы добавили свои appID и т. Д. В app.json
, это должно сработать.
import React from 'react';
import { AsyncStorage, Text, View, StyleSheet, SafeAreaView, Button } from 'react-native';
export default class App extends React.Component {
logIn = async () => {
let appID = '123456789012345' // <- you'll need to add your own appID here
try {
const {
type,
token, // <- this is your access token
expires,
permissions,
declinedPermissions,
} = await Expo.Facebook.logInWithReadPermissionsAsync(appID, {
permissions: ['public_profile', 'email'],
});
if (type === 'success') {
// Get the user's name using Facebook's Graph API
const response = await fetch(`https://graph.facebook.com/me/?fields=id,name&access_token=${token}`); //<- use the token you got in your request
const userInfo = await response.json();
console.log(userInfo);
alert(userInfo.name);
// you could now save the token in AsyncStorage, Redux or leave it in state
await AsyncStorage.setItem('token', token); // <- save the token in AsyncStorage for later use
} else {
// type === 'cancel'
}
} catch ({ message }) {
alert(`Facebook Login Error: ${message}`);
}
}
makeGraphRequest = async () => {
try {
let token = await AsyncStorage.getItem('token');
// Get the user's name using Facebook's Graph API
const response = await fetch(`https://graph.facebook.com/me/?fields=id,name&access_token=${token}`);
const userInfo = await response.json();
alert(userInfo.name)
} catch (err) {
alert(err.message)
}
}
render() {
return (
)
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'white'
}
});
хмм .. если бы у вас был список, подобный следующему:
<span class="apple">red apple</span>
<span class="apple">green apple</span>
<span class="pear">big pear</span>
<span class="pear">little pear</span>
следующее будет отображать все:
$("span.*").show();
следующее скроет все элементы с 'class = "apple"':
$("span[class='apple']").hide();
, или вы могли бы спрятать все, что не имеет 'class = "pear"':
$("span[class!='pear']").hide();