撤销个人权限后更新会话

2024-01-26

我试图为用户提供一个通过复选框(Facebook SDK for Android)设置/撤销发布权限的选项。下面提供了代码。一切工作正常,除了在撤销负责检查发布权限的代码后惨遭失败。

据我所知,Session 无法知道用户登录后是否撤销了任何权限。处理这种情况的正确方法是什么?我是否必须手动查询可用权限,或者是否有办法使用基本权限无缝地重新创建会话?

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ...
    publishCheckbox = (CheckBox) view.findViewById(R.id.publishCheckbox);
        publishCheckbox.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                CheckBox chb = (CheckBox) v;
                if (chb.isChecked() && checkForPublishPermission() == false){
                    requestPublishPermissions();                            
                }
                else{
                    removePublishPermissions();
                }   

            }

        });
    ...
}

private void requestPublishPermissions() {
    Session session = Session.getActiveSession();
    if ( session!= null && session.isOpened()){
        Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS).setRequestCode(REAUTH_ACTIVITY_CODE);
        newPermissionsRequest.setCallback(callback);
        session.requestNewPublishPermissions(newPermissionsRequest);
    }               
}   

private void removePublishPermissions() {       
    Request r = new Request(Session.getActiveSession(), PUBLISH_ACTIONS_PERMISSION_PATH, null, HttpMethod.DELETE);
    r.setCallback(new Request.Callback() {

        @Override
        public void onCompleted(Response response) {
            publishCheckbox.setEnabled(true);                               
        }
    });
    r.executeAsync();
    publishCheckbox.setEnabled(false);
}

private boolean checkForPublishPermission(){
    boolean result = false;

    Session session = Session.getActiveSession();

    if (session == null || !session.isOpened()) {
        result = false;
    }
    else{
        List<String> permissions = session.getPermissions();
        if (permissions.containsAll(PERMISSIONS)) {
            result = true;
        }
    }       

    return(result);
}   

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (state.isOpened()) { 
        ...
        publishCheckbox.setChecked(checkForPublishPermission());
        ...
    } else if (state.isClosed()) {          
        ...                             
    }       
}

好吧,每次我需要这样的检查时,我最终都会请求用户权限,大致如下:

private void checkForPublishPermission(){
    mPublishCheckbox.setEnabled(false);
    Request r = new Request(Session.getActiveSession(), PUBLISH_ACTIONS_PERMISSION_PATH, null, HttpMethod.GET);
    r.setCallback(new Request.Callback() {

        @Override
        public void onCompleted(Response response) {
            if (response != null) {
                GraphObject o = response.getGraphObject();              
                    if ( o != null){
                        JSONArray data = o.getInnerJSONObject().optJSONArray("data");                       
                        mCanPublish = (data.optJSONObject(0).has("publish_actions"))?true:false;                            
                        mPublishCheckbox.setChecked(mCanPublish);                                                       
                    }
            }
            mPublishCheckbox.setEnabled(true);
        }
    });
    r.executeAsync();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

撤销个人权限后更新会话 的相关文章

随机推荐

  • 导入错误:无法导入名称足球

    我刚刚安装python xy 2 7 9 on Windows 7 我去运行一些以前编写的代码Spyder其中调用 from scipy sparse import linalg as sla 但是 我收到以下错误 File C Pytho
  • 在 Ruby 中将变量与两个不同值进行比较

    这更多的是一个语义问题 我想检查一个变量是否是两个值之一 最简单的方法是 if var foo var bar or if var 3 var 5 但这对我来说并不感觉很干 我知道我可以使用String match 但这不适用于非字符串变量
  • 多次上传是否遵循我们选择图像的相同上传顺序?

    我正在使用 HTML5 多重上传功能
  • 不明白为什么我的 SQL 不起作用

    DROP TABLE STATEMENTS DROP TABLE BUILDING CASCADE CONSTRAINTS PURGE DROP TABLE ROOM CASCADE CONSTRAINTS PURGE DROP TABLE
  • strncpy 的问题以及如何修复它

    我正在学习 C 并阅读 Learn C The Hard Way ISBN 10 0 321 88492 2 我被困在练习 17 如何打破它 上 这是书上的问题 由于 strncpy 性能不佳 该程序存在错误 设计的 去阅读有关 strnc
  • 以 em 单位设置根元素的字体大小意味着什么?

    我没找到官方的定义em单位 但我在规范中发现了这一点 我还发现了很多其他来源 如下所列 这让我想到 设置根元素的字体大小是什么意思 即 to em units 尽管我的很多消息来源都建议使用em 我找不到任何专门指出根元素用法的内容 htm
  • 如何使用mochijson在erlang中编码数据结构?

    我正在使用mochiweb 我不知道如何使用它的json编码器来处理复杂的数据结构 mochijson 和 mochijson2 有什么区别 有什么好的例子吗 我总是收到以下错误 46 gt T6 struct hello asdf fro
  • ListViewItem 工具提示 WPF

    我需要的是 当每个列表视图项的鼠标在工具提示中显示每个列表视图的所有数据时 这是我的视图模型的一部分 using GalaSoft MvvmLight using GalaSoft MvvmLight CommandWpf private
  • Servlet 参数和 doPut

    尝试使用 HttpServlet doPut 从 PUT 请求获取参数 public void doPut HttpServletRequest request HttpServletResponse response String nam
  • 如何从 UIImage 获取文件路径?

    通常情况相反 您使用路径来显示图像 我想知道如果您已经有了图像 是否可以获得路径 如果您已经拥有图像 即已将文件添加到资源中 则可以使用它来获取文件路径 NSString string NSBundle mainBundle pathFor
  • 如何使用 freetype 渲染“Segoe UI Emoji”中的彩色字形?

    我正在尝试使用最新的 freetype 2 8 1 我从源代码编译了 x64 调试版本 没有单线程或多线程 和 OpenGL 从 Windows Segoe UI Emoji 字体渲染彩色字形 所以我用seguiemj ttf来自Windo
  • 使用Aptana Studio导入git项目但权限被拒绝(publickey)

    我尝试将现有项目从 github 存储库导入 aptana studio 但出现错误 提示权限被拒绝 公钥 fatal 远端意外挂断 我确保将 ssh 添加到我在 github 中的帐户 我还运行了 ssh vT 电子邮件受保护 cdn c
  • 将原始类型指针转换为结构指针 - 对齐和填充?

    就在我回答问题 20 分钟的时候 我想到了一个有趣的场景 但我不确定其行为 让我有一个大小为 n 的整数数组 由 intPtr 指向 int intPtr 让我也有一个这样的结构 typedef struct int val1 int va
  • Flutter Firebase 删除子集合不起作用

    在我的 Firebase 结构中 我有一个集合和其中的一些子集合 我想当我删除集合时 也删除子集合 我正在尝试执行 Firebase 文档中的操作 要删除 Cloud Firestore 中的整个集合或子集合 请检索集合或子集合中的所有文档
  • 使用 python 和 conda 扩展 openCV 的 GUI

    我在用着开放式CV 3 3 with python3 6 3我安装在conda环境和一段时间 当显示图像时 使用基本的 cv2 函数imshow window name my image 例如 一个小的 GUI 将与图像一起显示 我还能够随
  • 是否可以将默认的类dunder方法转换为类方法?

    为了给你一些背景信息 昨天我遇到了这个帖子 https stackoverflow com q 62031547 5472354 我发现这个问题非常有趣 所以我尝试找到一种解决方案 使语法尽可能接近所要求的内容 这是我想出的 class D
  • GCC:为什么常量变量不放在.rodata中

    我一直相信 GCC 会设立一个static const变量为 rodata段 或 textELF 或此类文件的优化段 但情况似乎并非如此 我目前正在使用gcc GCC 4 7 0 20120505 prerelease 在装有 GNU Li
  • 如何将 select2 与 Meteor 一起使用?

    有人可以向我解释 select2 如何与 Meteor 一起使用吗 我在用zimme select2 bootstrap 3 css https atmospherejs com zimme select2 bootstrap3 css我不
  • 使用Spring将文本文件直接注入到String中

    所以我有这个 Value classpath choice test html private Resource sampleHtml private String sampleHtmlData Before public void rea
  • 撤销个人权限后更新会话

    我试图为用户提供一个通过复选框 Facebook SDK for Android 设置 撤销发布权限的选项 下面提供了代码 一切工作正常 除了在撤销负责检查发布权限的代码后惨遭失败 据我所知 Session 无法知道用户登录后是否撤销了任何