如何在 react native 和 facebook sdk 中管理用户帐户状态?

Posted

技术标签:

【中文标题】如何在 react native 和 facebook sdk 中管理用户帐户状态?【英文标题】:How do I manage user account state in react native and the facebook sdk? 【发布时间】:2017-04-15 08:53:19 【问题描述】:

在我的 react native 应用程序中,我通过 facebook 处理用户帐户。我已成功将 Facebook SDK 连接到我的应用程序,并且成功显示“使用 Facebook 登录”按钮,当点击该按钮时,用户可以使用 Facebook 登录并将按钮文本更改为“注销”。如果用户点击“注销”,则会将其注销并将文本更改回登录。基本上,我似乎具有登录和注销工作的基本功能。

关于用户是否登录 Facebook 的状态,我有几个问题。

一方面,用户的登录似乎不会在应用生命周期之间持续存在。如果我关闭应用程序并重新打开它,它会提示我再次登录,而不是记住我刚刚登录并自动使用 Facebook 登录。有没有办法告诉它通过 FacebookSDK 轻松执行此操作/缓存登录?我想肯定有,但 Facebook 的文档似乎很少。

此外,有没有办法通过布尔属性或仅表示用户是否登录的内容来检查用户现在的状态。

下面是我当前的代码,它成功地显示了 Facebook 登录和注销按钮以及处理登录和注销流程。

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React,  Component  from 'react';
import 
  AppRegistry,
  StyleSheet,
  Text,
  View
 from 'react-native';

const FBSDK = require('react-native-fbsdk');
const 
  LoginButton,
  AccessToken,
  GraphRequest,
  GraphRequestManager,
 = FBSDK;

export default class FBReact extends Component 
  render() 
    return (
      <View>
        <Text style=styles.welcome>
          Welcome to React Native!
        </Text>
        <Text style=styles.instructions>
          To get started, edit index.ios.js
        </Text>
        <Text style=styles.instructions>
          Press Cmd+R to reload,'\n'
          Cmd+D or shake for dev menu
        </Text>
        <LoginButton
          publishPermissions=["publish_actions"]
          onLoginFinished=
            (error, result) => 
              if (error) 
                alert("login has error: " + result.error);
               else if (result.isCancelled) 
                alert("login is cancelled.");
               else 
                AccessToken.getCurrentAccessToken().then(
                  (data) => 
                    alert(data.accessToken.toString())
                  
                )
              
            
          
          onLogoutFinished=() => alert("logout.")
          onLogInFound=() => alert("log in found.")/>
      </View>
    );
  



AppRegistry.registerComponent('FBReact', () => FBReact);

【问题讨论】:

【参考方案1】:

    对于存储数据,您可以使用AsyncStorage。 AsyncStorage 是一个简单的、未加密的、异步的、持久的、键值对应用程序的全局存储系统。它将数据存储在本地存储中,因此您可以在下次启动时访问它们。

    您可以使用Access Tokens。检查AccessToken.getCurrentAccessToken(),如果有有效的Access Tokens,用户仍然登录。

【讨论】:

谢谢。我想知道是否有比使用 AsyncStorage 更好的方法在应用程序打开/关闭之间让 facebook 登录持久性?似乎这种持久性将内置到 Facebook SDK 中

以上是关于如何在 react native 和 facebook sdk 中管理用户帐户状态?的主要内容,如果未能解决你的问题,请参考以下文章

庖丁解牛!深入剖析React Native下一代架构重构

游戏环境配置:React Native 开发环境配置 For Android

JUCE 和 React Native - 链接器错误“ld: library not found for -lReact”

为啥我的 React Native 桥接 iOS 组件不起作用?

React-native:如何在 React-native 中使用(和翻译)带有 jsx 的 typescript .tsx 文件?

在react-native中,我如何在ios和android的图像上添加水印