2017-08-08 2 views
0

Je dois recevoir tous les messages adressés à l'utilisateur qui identifie le jeton d'accès. C'est pour obtenir tous les commentaires que les autres utilisateurs ont fait dans leurs messages, les commentaires qui ont fait dans leurs albums. Et aussi les messages qu'ils ont reçus dans les conversations."Requiert une autorisation étendue: read_mailbox" lorsque j'obtiens toutes les conversations

Je l'ai fait comme suit:

@Override 
    public List<CommentEntity> getCommentsLaterThan(Date startDate, String accessToken) { 

     List<CommentEntity> comments = new ArrayList<CommentEntity>(); 
     try { 
      logger.debug("Call Facebook API for accessToken : " + accessToken + " on thread: " + Thread.currentThread().getName()); 
      FacebookClient facebookClient = new DefaultFacebookClient(accessToken, Version.VERSION_2_8); 
      // Get Information about access token owner 
      User user = facebookClient.fetchObject("me", User.class); 

      StreamUtils.concat(
       StreamUtils.concat(
        getAllCommentsFromPostsAfterThan(facebookClient, startDate, user), 
        getAllCommentsFromAlbumsAfterThan(facebookClient, startDate, user) 
       ) 
       .map(comment -> facebookCommentMapper.facebookCommentToCommentEntity(comment)), 
       getAllCommentsFromConversationsAfterThan(facebookClient, startDate, user) 
      ) 
      .collect(Collectors.toList()); 

      logger.debug("Total Facebook comments : " + comments.size()); 
     } catch (FacebookOAuthException e) { 
      logger.error(e.getErrorMessage()); 
      throw new InvalidAccessTokenException(SocialMediaTypeEnum.FACEBOOK, accessToken); 
     } catch (Exception e) { 
      throw new GetCommentsProcessException(e); 
     } 
     return comments; 
    } 

La méthode getAllCommentsFromConversationsAfterThan est expliquée ci-dessous:

private Stream<CommentEntity> getAllCommentsFromConversationsAfterThan(FacebookClient facebookClient, Date startDate, User user) { 
      Connection<Conversation> conversations = facebookClient.fetchConnection("me/conversations", Conversation.class); 
     return StreamUtils.asStream(conversations.iterator()) 
       .flatMap(List::stream) 
       .flatMap(conversation -> { 
        Connection<Message> messages = facebookClient.fetchConnection(
          conversation.getId() + "/messages", Message.class, Parameter.with("fields", "message,created_time,from,id")); 
        return StreamUtils.asStream(messages.iterator()); 
       }) 
       .flatMap(List::stream) 
       .filter(message 
         -> !message.getFrom().getId().equals(user.getId()) 
       && (startDate != null ? message.getCreatedTime().after(startDate) : true)) 
       .map(message -> facebookMessageMapper.facebookMessageToCommentEntity(message)); 
    } 

J'ai obtenu un jeton d'accès via l'API Graph Explorateur Tool. Accorder toutes les autorisations. Et une exception se produit avec ce message d'erreur.

(# 298) Requires extended permission: read_mailbox " 

La documentation indique que l'autorisation read_mailbox est obsolète. Je utilise la version 2.8. Est-il possible d'obtenir les messages des conversations?

Merci à l'avance

+1

Non, il n'y a plus d'accès API aux messages privés d'un utilisateur. – CBroe

Répondre

0

vous devez d'abord obtenir un jeton d'accès utilisateur avec l'autorisation de read_page_mailboxes. Ensuite, vous pouvez générer le jeton d'accès à la page.