当前位置: 首页 > 知识库问答 >
问题:

Spring Social Facebook UncategorizedApiException:(#3)应用程序无法调用此API

西门建安
2023-03-14

我已经开发了一个简单的web应用程序,通过Spring Boot(V1.2.6.release)和Spring Social Facebook(V2.0.2.release)访问Facebook数据,类似于这里给出的示例

<html>
<head>
    <title>Facebook Extractor</title>
</head>
<body>
    <h3>Connect to Facebook</h3>

    <form action="/recommender/connect/facebook" method="POST">
        <input type="hidden" name="scope" value="public_profile, user_friends, email, user_likes" />
        <div class="formInfo">
            <p>You aren't connected to Facebook yet. Click the button to connect this application with your Facebook account.</p>
        </div>
        <p><button type="submit">Connect to Facebook</button></p>
    </form>
</body>

(#3)应用程序不具备进行此api调用的能力。

这里是控制器的主要部分,处理从脸书应用程序的重定向:

@Controller

@scope(value=“session”)公共类FacebookExtractor{

private Logger logger = Logger.getLogger(FacebookExtractor.class);

private Facebook facebook;
@Autowired
GraphDatabase graphDatabase;
@Autowired
PersonRepository personRepository;
@Autowired
UserProfileRepository userProfileRepository;
@Autowired
AttributeDefinitionRepository attributeDefinitionRepository;
@Autowired
AttributeRepository attributeRepository;
@Autowired
ConceptRepository conceptRepository;
@Autowired
RecommenderGovConsumerRepository recGovRepository;
@Autowired
GovConsumerInfluencedByGovConsumerRelationshipRepository influenceRepository;
@Autowired
ExtractorListener listener;

private String userBind;

@Inject
public FacebookExtractor(Facebook facebook) {
    this.facebook = facebook;
}

@RequestMapping(method = RequestMethod.GET, value = "/facebookExtractor")
public ModelAndView FacebookDataUserExtraction() {
    if (!facebook.isAuthorized()) {
        return new ModelAndView("redirect:/recommender/connect/facebook");
    }
    String account=userBind;
    Long netId = null;
    Transaction tx = graphDatabase.beginTx();
    try {
        User user = facebook.userOperations().getUserProfile();
        Person p = savePerson(user);
        UserProfile up = saveUserProfile(user);
        up.setUser(p);
        userProfileRepository.save(up);
        p.setProfile(up);
        saveSocialInteractions(up);
        saveSocialPreferences(up);
        personRepository.save(p);
        netId=p.getId();
        tx.success();
    } finally {
        tx.close();
    }
    if (account != null) {
        /*
         * Binding di Facebook riuscito.
         */
        listener.onProfileDataCompleted(netId, SNAccountType.Facebook);
        listener.onInteractionsCompleted(netId, InteractionType.Friendship, SNAccountType.Facebook);
        return new ModelAndView("redirect:http://localhost:8080/portal",
                "accountF", account);
    } else {
        //vista opportuna per estrazione avvenuta senza bind
        return new ModelAndView("facebookNoBindExtraction");
    }
}

共有1个答案

程瑞
2023-03-14

问题是PROFILE_FILEDS

public User getUserProfile(String facebookId) {
  return graphApi.fetchObject(facebookId, User.class, PROFILE_FIELDS);
}

数组PROFILE_FIELDS包含许多字段,正如我正确理解的spring-social docs,Facebook只返回您有权查看的这些字段。但现在有些事情变了:

$curl "https://graph.facebook.com/v2.5/me?access_token=[access_tokens]&fields=[all_the_fields_from_PROFILE_FIELDS]
{"error":{"message":"(#3) Application does not have the capability to make this API call.","type":"OAuthException","code":3,"fbtrace_id":"Antivssjj1d"}}

$ curl "https://graph.facebook.com/v2.3/me?access_token=[access_token]&fields=id,about"
{"id":"1135898619755433"}

与此同时,我找到了解决方案。取而代之的是

User profile = facebook.userOperations().getUserProfile()

我们可以用

User profile = facebook.fetchObject("me", User.class, "id", "name", "link", "email");

//Note: facebook = org.springframework.social.facebook.api.Facebook
//Note: User.class = org.springframework.social.facebook.api.User.class
 类似资料:
  • My AndroidManifest.xml 文件 我的Gradle 我尝试清理/重建 gradle 项目、重新启动 Android Studio、使缓存失效和 rebbot ADB 集成(工具 - 有什么想法吗? 附言:在此之前,我更改了应用程序包的名称 P、 Android Studio无法调试其他项目。

  • 问题内容: 我正在尝试打包Grails 3.1.5应用程序。 运行(或)会产生以下结果: 运行时给出: 我的版本是: 我已经删除了缓存文件夹,运行,但是没有运气。 编辑 :我当前的解决方案是使用gradle建立战争;在构建中生成一个uber- jar,我可以将其用于部署。一定会很好地为此使用grails(除非我遗漏了一些东西)。 问题答案: 我通过使用以下方法解决了这个问题: 这会在中产生WAR

  • 每次我重新安装我的应用程序时,我的模拟器都会给出这个错误。无法将副本/users/username/library/developer/CoreSimulator/devices/f1cc399F-Fab0-4B9E-BE2A-3335069C0382/data/containers/bundle/application/d70fa1a9-4192-443A-9322-7ff757f2fe1f/m

  • 我不知道是怎么回事?? 任何人都可以提供一个数据通道的工作示例,将非常感谢。

  • 我有一个已经在商店中的应用程序,现在我正忙着做一些更改,我想在提交更新到商店之前在设备上测试。 更改后,我为iOS发送了一个调试版本。当我尝试在我的设备上安装应用程序时,什么也没发生,甚至没有显示codename-one.appspot.com想安装“应用程序名称”的常规对话框。 我还尝试在我的苹果电脑上通过iTunes安装应用程序,但安装失败。 我在使用iFunbox时也遇到了一个错误。 我的应

  • 当我在我的设备(Galaxy Note 3和Ouya)上调试一个在Android Studio中编写的应用程序时,该应用程序调试良好,并在设备上运行,但是该应用程序从未出现在应用程序抽屉中,所以我无法在断开连接的设备上运行它(即当我的开发计算机离开时,向其他人显示正在运行的应用程序)。我的应用程序曾经安装为可运行的应用程序,但这似乎不再发生。然而,应用程序在应用程序管理器中被列为一个应用程序,我可