android - 使用 Facebook-Android SDK 3.0 正确请求发布权限

标签 android facebook permissions publish facebook-android-sdk

我正在开发一种设置,用户可以选择将他们在我的应用程序上发布的帖子自动发布在 Facebook 上。

我找到了这个例子:https://github.com/fbsamples/android-3.0-howtos/blob/master/PublishFeedHowTo/src/com/facebook/samples/publishfeedhowto/MainFragment.java

但是,由于此功能是我的应用程序中的一项设置,我需要将“允许权限”逻辑与发生在另一个单独 Activity 上的实际“发出发布请求”逻辑分开。

乍一看,我以为我可以将下面的代码块剪切并粘贴到我的 Activity 中,并且假设我的用户已经使用 facebook 登录,那么它就可以工作,但显然我还必须实现 uihelpers 和 Session.StatusCallback's 。我需要在请求权限的设置 Activity 中实现哪些额外代码(除了下面的逻辑)?

    private void publishStory() {
        Session session = Session.getActiveSession();
        if (session != null) {

            // Check for publish permissions    
            List<String> permissions = session.getPermissions();
                if (!isSubsetOf(PERMISSIONS, permissions)) {
                    pendingPublishReauthorization = true;
                    Session.NewPermissionsRequest newPermissionsRequest = new Session
                            .NewPermissionsRequest(this, PERMISSIONS);
                    session.requestNewPublishPermissions(newPermissionsRequest);
                    return;
               }

        }
    }

    private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
        for (String string : subset) {
            if (!superset.contains(string)) {
                return false;
            }
        }
        return true;
    }

}

最佳答案

正如 Ming Li 在评论中指出的那样,您不需要实现 uihelpers,但您还需要以下内容。

实现StatusCallback

private Session.StatusCallback statusCallback = new SessionStatusCallback();

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(final Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {
            switch (state) {
                case OPENED_TOKEN_UPDATED:
                    publishStory(); // Comes here after the  new permissions are requested
                    break;
            }
        }
    }
}

实现onActivityResult()

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

添加代码以在 publishStory() 中完成实际工作

private void publishStory() {
    Session session = Session.getActiveSession();
    if (session != null) {

        // Check for publish permissions    
        List<String> permissions = session.getPermissions();
            if (!isSubsetOf(PERMISSIONS, permissions)) {
                pendingPublishReauthorization = true;
                Session.NewPermissionsRequest newPermissionsRequest = new Session
                        .NewPermissionsRequest(this, PERMISSIONS);
                session.requestNewPublishPermissions(newPermissionsRequest);
                return;
           }

        // Do the real work here
        ...
    }
}

关于android - 使用 Facebook-Android SDK 3.0 正确请求发布权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18248893/

相关文章:

android - 重新安装应用程序时未调用 BackupAgent.onRestore 但调用 bmgr 还原命令

android - 从APK/发行版/文件夹安装哪个Flutter APK

facebook - 邀请网站访问者无需应用程序即可共享

Facebook 图表 API : How to get a subset of post insights in nested query of posts

sql-server - 如何检测我是否有CREATE TABLE权限?

sql - 实现向数据库角色授予对数据库中所有用户表的权限的 SQL 脚本的最佳方法是什么?

java - Android 上的 HttpURLConnection GET 请求给出奇怪的 501 代码

Java检查文件大小是否大于0

facebook - 无法向 FB 提交错误报告

linux - *nix 中的打印机配置文件