注销后无法使用 Facebook 凭据登录

2024-01-18

我有一个 Android 应用程序,允许用户使用 Facebook 凭据登录。一旦他们第一次注销,他们就无法再次登录。清除应用程序的权限后用户设置中的应用程序页面 https://www.facebook.com/settings?tab=applications在 Facebook 网站上,登录正常。

I use a LoginButton登录。

需要能够访问登录信息的活动,扩展此AuthActivity活动。

public class AuthActivity extends Activity {
    private AuthUtils authUtils;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        authUtils = new AuthUtils(this);
        authUtils.onCreate(savedInstanceState);
    }

    public AuthUtils getAuthUtils() {
        return authUtils;
    }

    @Override
    public void onStart() {
        super.onStart();
        authUtils.onStart();
    }

    @Override
    public void onStop() {
        super.onStop();
        authUtils.onStop();
    }

    @Override
    public void onResume() {
        super.onResume();
        authUtils.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        authUtils.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        authUtils.onDestroy();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        authUtils.onSaveInstanceState(outState);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        authUtils.onActivityResult(requestCode, resultCode, data);
    }
}

AuthUtils 看起来像这样。我删除了所有与 Google+ 登录相关的内容以及与登录过程无关的所有内容,例如使用我的应用程序首选项保存用户信息。

public class AuthUtils implements ConnectionCallbacks, OnConnectionFailedListener {
    private final Activity activityContext;
    private UiLifecycleHelper facebookUiHelper;

    public AuthUtils(Activity context) {
        this.activityContext = context;

        facebookUiHelper = new UiLifecycleHelper(context, facebookStatusCallback);
    }

    public void signInFacebook() {
        LoginButton facebookLoginButton = new LoginButton(activityContext);
        facebookLoginButton.setReadPermissions(Arrays.asList("email"));
        facebookLoginButton.performClick();
    }

    public void signOutFacebook() {
        Session facebookSession = Session.getActiveSession();
        if(facebookSession != null) {
            facebookSession.closeAndClearTokenInformation();
        }
    }

    private StatusCallback facebookStatusCallback = new StatusCallback() {
        @Override
        public void call(final Session session, SessionState state, Exception exception) {
            if(state.isOpened()) {
                Request.newMeRequest(session, new GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        String email = "";

                        if(user.asMap().containsKey("email")) {
                            email = user.getProperty("email").toString();
                        } else {
                            // ... not related to login
                        }

                        // Some actions here, not related to login.
                    }
                });
            } else if(state.isClosed()) {
                // ... not related to login
            }
        }
    };

    public void onCreate(Bundle savedInstanceState) {
        facebookUiHelper.onCreate(savedInstanceState);
    }

    public void onResume() {
        facebookUiHelper.onResume();
    }

    public void onPause() {
        facebookUiHelper.onPause();
    }

    public void onDestroy() {
        facebookUiHelper.onDestroy();
    }

    public void onSaveInstanceState(Bundle outState) {
        facebookUiHelper.onSaveInstanceState(outState);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        facebookUiHelper.onActivityResult(requestCode, resultCode, data);
    }
}

即使运行 Facebook 的示例应用程序,我也遇到了同样的问题。我通过向 Facebook 提供默认签名密钥解决了这个问题:都在我的示例应用程序的开发人员设置中https://developers.facebook.com/settings/developer/sample-app/ https://developers.facebook.com/settings/developer/sample-app/然后在 Android 平台的应用程序设置中。

Facebook 建议了一种获取默认密钥的简单方法,可以在“故障排除”下找到该方法:https://developers.facebook.com/docs/android/getting-started https://developers.facebook.com/docs/android/getting-started。下面提供了运行 Hello Facebook 示例应用程序时执行此操作的代码。

try {
    PackageInfo info = getPackageManager().getPackageInfo(
        "com.facebook.samples.hellofacebook", 
        PackageManager.GET_SIGNATURES);

    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}

注意:当您发布应用程序时,您不应使用默认密钥并使用自己的密钥生成和签名应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

注销后无法使用 Facebook 凭据登录 的相关文章

  • 从 java 活动 *.java 启动 kotlin 活动 *.kt?

    使缓存无效 重新启动 帮助我 我在java类中的代码是 Intent intent new Intent view getActivity AddPaymentActivity class view getActivity startAct
  • 基于磁盘的 HashMap [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Java 是否有 或者是否有可用的库 允许我拥有基于磁盘的 HashMap 它不需要是原子的或任何东西
  • java springrabbit - 优雅地拒绝消息

    我有以下侦听器方法 Override public void onMessage Message message Channel channel try do something bad catch Exception e try long
  • String.intern() 线程安全吗

    我想在Java中使用 String intern 来节省内存 对具有相同内容的字符串使用内部池 我从不同的线程调用这个方法 这是个问题吗 对你的问题的简短回答是肯定的 它是线程安全的 但是 您可能需要重新考虑使用此工具来减少内存消耗 原因是
  • 将 glReadPixels 替换为 EGL_KHR_image_base 以加快像素复制速度

    我试图在 Android 本机进程中使用 EGL KHR image base 来替换 glReadPixels 因为它很慢 1280x800 RGBA 为 220ms 这是我到目前为止所拥有的 但我的它产生一个空缓冲区 只有零 uint8
  • RecyclerView onClick notificationItemRemoved 不会触发 onBindView

    I use notifyItemRemoved 方法我想更改其他剩余项目 但该方法没有触发onBindView 方法 除了使用notifyDataSetChanged 我想要附带的动画notifyItemRemoved method 如果您
  • 更改JavaFX TableView字体大小[重复]

    这个问题在这里已经有答案了 您好 我想在表视图列内的文本上设置字体 我如何用 Java 做到这一点 这是我的代码 感谢帮助 private final TableView
  • 在 Cordova / PhoneGap 中生成 iOS 和 Android 图标

    我有一个新创建的 Cordova 项目 其中包含以下内容config xml设置 使用来自http docs phonegap com en edge config ref images md html http docs phonegap
  • 如何更改Android软键盘中任意键的按键背景

    我想让键盘上的一些键与其他键不同 例如下图中的shift 删除 空格键 根据google的参考文档 我们可以通过使用 来改变按键的背景android keybackground drawable xxx in input xml 但它改变了
  • 如何在没有片段的情况下使用导航抽屉?

    我正在尝试遵循这个tutorial https developer android com training implementing navigation nav drawer html关于如何创建导航抽屉 但我不想在用户从抽屉列表中选择
  • 如何让 Camel FTP 按需只获取一次

    我对骆驼还很陌生 我一直在尝试让 Camel 根据需要仅通过 FTP 获取单个文件一次 我无法让它发挥作用 这是我尝试过的 让我知道什么是最好的方法以及我的代码有什么问题 1 读取文件后发送一条空消息当收到空消息时 停止路由 from di
  • Java泛型类型参数中的问号是什么意思? [复制]

    这个问题在这里已经有答案了 这是取自斯坦福解析器附带的一些示例的一小段代码 我已经用 Java 进行了大约 4 年的开发 但从未对这种风格的代码应该表示什么有非常深入的理解 List
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • 为什么找不到 getservletcontext?

    我正在尝试使用getServletContext getRealPath 但我不断收到此错误 cannot find symbol symbol method getServletContext location interface jav
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 使用替换但不使用根元素的 Jaxb 继承

    我正在浏览布莱斯的博客http blog bdoughan com 2010 11 jaxb and inheritance using substitution html http blog bdoughan com 2010 11 ja
  • 找出对象列表中是否包含具有指定字段值的内容?

    我有一个从数据库收到的 DTO 列表 它们有一个 ID 我想确保我的列表包含具有指定 ID 的对象 显然 在这种情况下创建具有预期字段的对象不会有帮助 因为 contains 调用 Object equals 并且它们不会相等 我想出了这样
  • 如何使用 iBatis (myBatis) 的注释进行 IN 查询?

    我们只想在 MyBatis 中使用注释 我们确实在努力避免使用 xml 我们尝试使用 IN 子句 Select SELECT FROM blog WHERE id IN ids List
  • 更改 ActionMode 溢出图标

    有没有办法更改 ActionMode Overflow 图标而不更改 正常 ActionBar 的图标 我仍然需要弄清楚如何仅更改 ActionMode Actionbar 内部的溢出图标 因为我更改了默认操作栏中的溢出图标 该图标在 Ac
  • 如何将元素添加到通用集合

    我想知道如何将专用对象添加到通用集合中 我正在使用以下代码 Collection

随机推荐

  • HashMap get/put 复杂性

    我们习惯说HashMap get put操作是 O 1 然而 这取决于哈希实现 默认的对象哈希实际上是 JVM 堆中的内部地址 我们确信这样的说法就足够好了吗 get put是 O 1 可用内存是另一个问题 据我从 javadocs 了解到
  • 请求中添加请求参数

    我需要在一个kernel event listener在阶段kernel controller为了做某事kernel response 听众 我考虑过添加一个参数 request对象 但是没有找到任何方法或这个 http api symfo
  • Node.js:如何附加到正在运行的进程并使用控制台调试服务器?

    我使用 永远 来运行我的应用程序 我想附加到运行环境来检查我的应用程序 那我能做什么呢 From http nodejs org api debugger html http nodejs org api debugger html 高级用
  • 我可以在会话之外或创建会话之间进行挂钩/回调吗?

    With train and evaluate 可以执行一个计划 根据我传递的规范来训练和评估模型 我可以注册一些钩子EvalSpec https www tensorflow org api docs python tf estimato
  • numpy.genfromtxt 导入元组而不是数组

    我正在尝试学习 Python 和 Numpy 所以请耐心等待 我正在使用 numpy genfromtxt 将 CSV 文件导入到矩阵中 CSV 如下所示 Time min Nm Speed Power Distance Rpm Bpm i
  • Azure Cosmo DB 是否对 45MB 数据库多收费?

    我们使用的 Cosmos DB 是 MongoDB 我们的数据库大小只有 45 MB 所有集合中的文档少于 10 000 个 我们每天运行少量查询和写入 每天少于 3000 个请求 而且我们每晚运行 MongoDB Dump 将整个数据库转
  • VBScript 或 VBA 中的 ISO 周数

    我怎样才能得到ISO 周数 http wikipedia org wiki ISO week dateVBScript 或 VBA 中的某个日期 首先 请注意 报告一周很重要year以及周数 因为日期的年份可能不同 多个 Windows 组
  • iOS 7 中的 UITextView 链接检测

    我有一个UITextView这是通过 Interface Builder 进行管理的 作为数据检测 我检查了 链接 在 iOS 6 中 一切工作正常 链接突出显示并且可以单击 但在 iOS 7 中 所有链接仍然只是纯文本 可编辑和可选择的复
  • 在正则表达式中查找模式的第二次出现

    我的输入是 String t1 test1 testVar varName ns2 test String t2 test2 testVar varName ns2 test defValue String patternString s
  • Ruby 相当于 Python 的 help() 吗?

    当使用交互式 Python 时 我倾向于依赖内置的help 函数告诉我期望和 或返回什么 并打印出任何可能对我有帮助的文档 Ruby 是否有与此功能等效的函数 我正在寻找可以在 irb 中使用的东西 例如 在交互式 Python 中我可以输
  • 使用 pydot 绘制决策树

    我已经训练了一个决定tree Python字典 如下 现在我尝试使用它来绘制它pydot http code google com p pydot 在定义树 pydot 图 的每个节点时 我为其指定一个唯一 且详细 的名称和一个简短的标签
  • 将双精度型/浮点型转换为字符串

    我需要将浮点数转换为十进制 或其他基数 的等效字符串 首先需要按照格式进行转换xE 0 where x是浮点数 我的想法是首先将浮点数截断为临时整数 然后将该整数转换为字符串 然后考虑小数部分 将其乘以10而小数部分不会变成0 将小数部分转
  • 有没有办法将 app/web.config 分成 2 个文件?

    我目前使用 app web config 来存储数据库的连接字符串 这意味着在升级时我们不会触及配置文件来保留这些字符串 然而 我们现在想要迁移到 MVC5 这样做需要在 app web config 中更新所有库定义 我们有一个具有类似配
  • 使用 CanCan 进行上下文感知授权

    我想使用 CanCan 来处理我的权限 我的网站有许多不同的权限级别 其中大多数都是上下文感知的 例如 以下是我的 3 个主要模型中的关系 class User lt ActiveRecord Base has many league re
  • 如何从 PHP 中的 URL 中去掉域名?

    我正在寻找一种方法 或函数 来删除输入到函数中的任何 URL 的 domain ext 部分 域名扩展名可以是任何内容 com co uk nl whatever 输入的 URL 可以是以下任何内容 http www domain com
  • Web.config URL 重写 - HTTPS 和非 WWW

    我需要两者兼而有之https and non www重写 同时也不对域进行硬编码 因为我们有很多服务器 这需要在web config 不在IIS 我读过很多文章 http www iis net learn extensions url r
  • 如何使用 Javascript 将查询参数附加到我的 URL?

    我正在构建一个 Web 应用程序 并使用 Firebase 将用户数据存储在 Cloud Firestore 中 我的网络应用程序上有一个页面 允许用户从 Cloud Firestore 查看他们的文档 我想在我的 URL 末尾添加一个查询
  • Wamp 图标为绿色,但点击时没有反应

    我面临的问题是 我新安装的 WAMP 3 0 正在运行 图标为绿色 apache 和 MYSQL 已启动并运行 本地主机页面可访问 但如果我单击 WAMP 图标来更改任何设置 图标没有反应根本不 鼠标左键或右键单击均不起作用 即使我想关闭
  • Backbone.js 在视图中获取渲染回调

    我有一个 Backbone 应用程序 我们有这样的东西 render function this el html template id plugin return this The id来自正在渲染的元素 这仅有时有效 因为它实际插入到
  • 注销后无法使用 Facebook 凭据登录

    我有一个 Android 应用程序 允许用户使用 Facebook 凭据登录 一旦他们第一次注销 他们就无法再次登录 清除应用程序的权限后用户设置中的应用程序页面 https www facebook com settings tab ap