android - 如何在 Android 中获取 Facebook 上的所有照片

标签 android facebook facebook-graph-api

我正在开发一个应用程序,其中我将 Facebook SDK 用于不同的目的。目前我已经实现了通过Facebook登录。现在我的下一个任务是获取登录用户的所有照片并将其显示在网格中。我正在关注 Facebook 官方开发者网站作为此任务的引用。以下是我用来获取用户照片的代码。

    new Request(
            Session.getActiveSession(),
            "/me/photos",
            getRequestParameters(),
            HttpMethod.GET,
            new Request.Callback() {
                public void onCompleted(Response response) {
                    /* handle the result */
                    Log.d("Response ","Response " + response);
                    mpBar.setVisibility(View.GONE);
                }
            }
        ).executeAsync();

private Bundle getRequestParameters() 
    {
        String accessToken = LoginSigbUpCustomerNew.mytoken;
           Bundle parameters = new Bundle(1);
           parameters.putString("access_token", accessToken);
           return parameters;
    }

在这里,我收到这样的回复:-

{Response:  responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[]}}, error: null, isFromCache:false}

我不明白为什么数据数组是空的。我还请求用户的 user_photos 权限。那么问题出在哪里呢。 我是这个 Facebook SDK 的新手,不知道如何解决这个问题。如果有人能帮助我那就太好了。

提前致谢。

最佳答案

根据 Facebook SDK 的文档,您请求照片的代码很好,但我认为您忘记向登录用户(在本例中为您)请求许可。

复制自 Facebook SDK 文档:需要具有 user_photos 权限的用户访问 token 才能查看该人被标记或已上传的所有照片。

以下链接为您提供了有关如何将访问 token 添加到登录按钮的小教程:https://developers.facebook.com/docs/android/login-with-facebook/v2.2?locale=en_GB#step3

在您的情况下,它会是(代码 fragment 仅适用于 Activity ,适用于 fragment :单击上面的网址并按照那里的教程进行操作。非常简单):

...
LoginButton authButton = (LoginButton) findViewById(R.id.ID_OF_YOUR_LOGIN_BUTTON);
authButton.setReadPermissions(Arrays.asList("user_photos"));
...

在您的重写 onCreate 方法中。


方法二:

...
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
    session.openForRead(new Session.OpenRequest(this)
        .setPermissions(Arrays.asList("user_photos"))
        .setCallback(YOUR_CALLBACK_CLASS_VARIABLE));
} else {
    // Open an active session. Basically happens when someone is already logged in.
}
...

在调用请求所有用户照片之前,您只需在用户尚未登录时打开一个新请求即可。这可能发生在 ButtonView.OnClickListener 类中,因为您似乎不是 Facebook 的 LoginButton。

YOUR_CALLBACK_CLASS_VARIABLE 是您实现 Session.StatusCallback 的类。我确信您知道它是什么以及它有什么作用。


方法三:

...
    Session.NewPermissionsRequest newPermissionsRequest = new Session
      .NewPermissionsRequest(this, Arrays.asList("user_photos"));
    session.requestNewReadPermissions(newPermissionsRequest);
...

当用户已经登录时(用户登录后),并且您希望向用户请求额外的权限以访问他的照片或其他内容。顺便说一句,这些都写在 Facebook SDK for Android 的文档中。

了解更多信息:https://developers.facebook.com/docs/android/login-with-facebook/v2.2?locale=en_GB#step3

关于android - 如何在 Android 中获取 Facebook 上的所有照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27423181/

相关文章:

android - kotlin 编译器返回此类警告

facebook - Azure 作为 Facebook 平台

json - facebook graph api 的 Swagger 文档

facebook-graph-api - 使用 FB.api(me/friends) 进入 Facebook Graph API 时如何选择图像大小?

Android:从数据库获取数据到ListFragment

android - onStateConflict 无冲突

java - Spring Security 和 Facebook OAuth 2.0 与图形 API 集成

facebook - Webhooks 失败并显示 "Invalid Scopes: pages_messaging_subscriptions"

php - 在 PHP 中从 Facebook 获取用户 ID

android - Nexus 6P 插入我的电脑时卡在充电模式