注销后无法使用 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 凭据登录 的相关文章

  • Ubuntu 16.04 - Genymotion:找不到 /dev/hw_random

    I install Genymotion on the Ubuntu 16 04 64Bit I created a virtual emulator for Android 6 0 then I run this emulator but
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口

随机推荐

  • 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