wake-up-neo.com

Die Fehlermeldung (# 12) ist für die Versionen v2.8 und höher nicht mehr veraltet

Ich habe Version 2.0.3.RELEASE von spring-social-facebook und Facebook-App api v2.8 verwendet .. Ich habe Facebook-Login angerufen, aber diese Nachricht zurückgegeben .. (# 12). 8 und höher " Wie kann ich das beheben?

29
Anselm Kim

Ich habe den gleichen Fehler erhalten, 2.0.3.RELEASE von spring-social-facebook scheint mit der API-Version 2.8 von API (gestern veröffentlicht) nicht kompatibel zu sein. Lesen von Facebook-Änderungsprotokoll für die Version 2.8 ( https://developers.facebook.com/docs/apps/changelog ):

User Bios - Das Biofeld im User-Objekt ist nicht mehr verfügbar. Wenn das Biofeld für eine Person festgelegt wurde, wird der Wert jetzt an das About-Feld angehängt.

Ich denke, wir müssen auf eine neue Version der Bibliothek von spring-social-facebook warten. In der Version 2.0.3 (im Interface org.springframework.social.facebook.api.UserOperations) befindet sich in der Konstanten PROFILE_FIELDS das Feld "bio", das in der Facebook API-Version v2.8 nicht unterstützt wird.

UPDATE: Ich habe in meinem Fall einen Workaround gefunden:

VOR:

Connection<Facebook> connection = facebookConnectionFactory.createConnection(accessGrant);
Facebook facebook = connection.getApi();
User userProfile = facebook.userOperations().getUserProfile();//raises the exception caused by the "bio" field.

NACH DEM

Connection<Facebook> connection = facebookConnectionFactory.createConnection(accessGrant);
Facebook facebook = connection.getApi();
String [] fields = { "id", "email",  "first_name", "last_name" };
User userProfile = facebook.fetchObject("me", User.class, fields);

Hier eine vollständige Liste der Felder, die Sie verwenden könnten:

{ "id", "about", "age_range", "birthday", "context", "cover", "currency", "devices", "education", "email", "favorite_athletes", "favorite_teams", "first_name", "gender", "hometown", "inspirational_people", "installed", "install_type", "is_verified", "languages", "last_name", "link", "locale", "location", "meeting_for", "middle_name", "name", "name_format", "political", "quotes", "payment_pricepoints", "relationship_status", "religion", "security_settings", "significant_other", "sports", "test_group", "timezone", "third_party_id", "updated_time", "verified", "video_upload_limits", "viewer_can_send_gift", "website", "work"}
50
user6904265

Problemumgehung für JHipster . Fügen Sie der SocialService-Klasse das folgende Snippet hinzu, bis spring-social-facebook behoben ist.

import Java.lang.reflect.Field;
import Java.lang.reflect.Modifier;
import javax.annotation.PostConstruct;

@PostConstruct
private void init() {
    try {
        String[] fieldsToMap = { "id", "about", "age_range", "birthday",
                "context", "cover", "currency", "devices", "education",
                "email", "favorite_athletes", "favorite_teams",
                "first_name", "gender", "hometown", "inspirational_people",
                "installed", "install_type", "is_verified", "languages",
                "last_name", "link", "locale", "location", "meeting_for",
                "middle_name", "name", "name_format", "political",
                "quotes", "payment_pricepoints", "relationship_status",
                "religion", "security_settings", "significant_other",
                "sports", "test_group", "timezone", "third_party_id",
                "updated_time", "verified", "viewer_can_send_gift",
                "website", "work" };

        Field field = Class.forName(
                "org.springframework.social.facebook.api.UserOperations")
                .getDeclaredField("PROFILE_FIELDS");
        field.setAccessible(true);

        Field modifiers = field.getClass().getDeclaredField("modifiers");
        modifiers.setAccessible(true);
        modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
        field.set(null, fieldsToMap);

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

Quelle: https://github.com/jhipster/generator-jhipster/issues/2349 - minus bio im fieldsToMap-Array.

29
Michal Foksa

Dies wurde in der neuen Version von spring-social-facebook behoben. Fügen Sie Ihrer pom.xml bitte folgendes hinzu

<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-facebook</artifactId>
    <version>3.0.0.M1</version>
</dependency>

Wenn Sie die Fehlermeldung erhalten, dass diese Version nicht verfügbar ist, fügen Sie auch Folgendes hinzu.

<repositories>
    <repository>
        <id>alfresco-public</id>
        <url>https://artifacts.alfresco.com/nexus/content/groups/public</url>
    </repository>
</repositories>
11
Heisenberg
package hello;

import  org.springframework.social.connect.ConnectionRepository;
import  org.springframework.social.facebook.api.Facebook;
import  org.springframework.social.facebook.api.PagedList;
import  org.springframework.social.facebook.api.Post;
import  org.springframework.social.facebook.api.User;
import  org.springframework.stereotype.Controller;
import  org.springframework.ui.Model;
import  org.springframework.web.bind.annotation.GetMapping;
import  org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class HelloController {

    private Facebook facebook;
    private ConnectionRepository connectionRepository;

    public HelloController(Facebook facebook, ConnectionRepository connectionRepository) {
        this.facebook = facebook;
        this.connectionRepository = connectionRepository;
    }

    @GetMapping
    public String helloFacebook(Model model) {
        if (connectionRepository.findPrimaryConnection(Facebook.class) == null) {
            return "redirect:/connect/facebook";
        }
        String [] fields = { "id","name","birthday","email","location","hometown","gender","first_name","last_name"};
        User user = facebook.fetchObject("me", User.class, fields);
        String name=user.getName();
        String birthday=user.getBirthday();
        String email=user.getEmail();
        String gender=user.getGender();
        String firstname=user.getFirstName();
        String lastname=user.getLastName();
        model.addAttribute("name",name );
        model.addAttribute("birthday",birthday );
        model.addAttribute("email",email );
        model.addAttribute("gender",gender);
        model.addAttribute("firstname",firstname);
        model.addAttribute("lastname",lastname);
        model.addAttribute("facebookProfile", facebook.fetchObject("me", User.class, fields));
        PagedList<Post> feed = facebook.feedOperations().getFeed();
        model.addAttribute("feed", feed);
        return "hello";
    }

}
8
Vasundhara

Ich hatte Probleme mit der neuen Version von spring-social-facebook. Um dies mit Version 2.0.3.RELEASE zu beheben, fügen Sie den folgenden Code in Ihre SocialService.Java ein.

@PostConstruct
private void init() {
    try {
        String[] fieldsToMap = {
            "id", "about", "age_range", "birthday", "context", "cover", "currency", "devices", "education", "email", "favorite_athletes", "favorite_teams", "first_name", "gender", "hometown", "inspirational_people", "installed", "install_type","is_verified", "languages", "last_name", "link", "locale", "location", "meeting_for", "middle_name", "name", "name_format","political", "quotes", "payment_pricepoints", "relationship_status", "religion", "security_settings", "significant_other","sports", "test_group", "timezone", "third_party_id", "updated_time", "verified", "viewer_can_send_gift","website", "work"
        };

        Field field = Class.forName("org.springframework.social.facebook.api.UserOperations").
                getDeclaredField("PROFILE_FIELDS");
        field.setAccessible(true);

        Field modifiers = field.getClass().getDeclaredField("modifiers");
        modifiers.setAccessible(true);
        modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
        field.set(null, fieldsToMap);

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

Dieser Code versucht nicht, das bio -Feld von Facebook abzurufen.

Weitere Details finden Sie hier: https://github.com/jhipster/generator-jhipster/issues/2349

5
joalcego

Ich hatte unter grails spring security facebook ein ähnliches Problem und dank @ user6904265 habe ich es geschafft, es zum Laufen zu bringen:

//This was provided example method:
//org.springframework.social.facebook.api.User fbProfile = facebook.userOperations().userProfile
//This is the groovy way of declaring fields:
String[] fields = ['id',"email", "age_range", "birthday","first_name",
                    "last_name","gender"]  as String[]
//This bit pay attention to the User.class segment. 
org.springframework.social.facebook.api.User fbProfile = 
facebook.fetchObject("me", 
org.springframework.social.facebook.api.User.class, fields)

Grundsätzlich lautet das oben angegebene Standardbeispiel User.class. Diese lokale Ausführung konnte Felder wie Nachname usw. nicht finden und gab eine Liste an, die abgefragt werden konnte. Diese Optionen stammen aus der eigentlichen Spring Security-Benutzerklasse (Standardeinstellung für meine App). Stellen Sie also sicher, dass Sie auch die richtigen Benutzerklassen suchen.

1
Vahid
FacebookTemplate template = new FacebookTemplate(access_token); 
String [] fields = { "id", "email",  "first_name", "last_name" };
User profile = template.fetchObject("me", User.class, fields);
0
Ishin Vin
0

Ich habe die Schnittstelle UserOperations in meinem Projekt geändert PROFILE_FIELDS Entfernen Bio Feld kopiert. Auf Tomcat hat meine bearbeitete Klasse Vorrang vor der Schnittstelle org.springframework.social.facebook.api.UserOperations, wodurch das Problem behoben wird. (siehe letzte Zeilen der Datei unten)

/*
 * Copyright 2015 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.Apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.social.facebook.api;

import Java.util.List;

import org.springframework.social.ApiException;
import org.springframework.social.MissingAuthorizationException;
public interface UserOperations {

/**
 * Retrieves the profile for the authenticated user.
 * @return the user's profile information.
 * @throws ApiException if there is an error while communicating with Facebook.
 * @throws MissingAuthorizationException if FacebookTemplate was not created with an access token.
 */
User getUserProfile();

/**
 * Retrieves the profile for the specified user.
 * @param userId the Facebook user ID to retrieve profile data for.
 * @return the user's profile information.
 * @throws ApiException if there is an error while communicating with Facebook.
 */
User getUserProfile(String userId);

/**
 * Retrieves the user's profile image. Returns the image in Facebook's "normal" type.
 * @return an array of bytes containing the user's profile image.
 * @throws ApiException if there is an error while communicating with Facebook.
 * @throws MissingAuthorizationException if FacebookTemplate was not created with an access token.
 */
byte[] getUserProfileImage();

/**
 * Retrieves the user's profile image. Returns the image in Facebook's "normal" type.
 * @param userId the Facebook user ID.
 * @return an array of bytes containing the user's profile image.
 * @throws ApiException if there is an error while communicating with Facebook.
 */
byte[] getUserProfileImage(String userId);

/**
 * Retrieves the user's profile image.
 * @param imageType the image type (eg., small, normal, large. square)
 * @return an array of bytes containing the user's profile image.
 * @throws ApiException if there is an error while communicating with Facebook.
 * @throws MissingAuthorizationException if FacebookTemplate was not created with an access token.
 */
byte[] getUserProfileImage(ImageType imageType);

/**
 * Retrieves the user's profile image.
 * @param userId the Facebook user ID.
 * @param imageType the image type (eg., small, normal, large. square)
 * @return an array of bytes containing the user's profile image.
 * @throws ApiException if there is an error while communicating with Facebook.
 */
byte[] getUserProfileImage(String userId, ImageType imageType);

/**
 * Retrieves the user's profile image. When height and width are both used,
 * the image will be scaled as close to the dimensions as possible and then
 * cropped down.
 * @param width the desired image width
 * @param height the desired image height
 * @return an array of bytes containing the user's profile image.
 * @throws ApiException if there is an error while communicating with Facebook.
 */
byte[] getUserProfileImage(Integer width, Integer height);

/**
 * Retrieves the user's profile image. When height and width are both used,
 * the image will be scaled as close to the dimensions as possible and then
 * cropped down.
 * @param userId the Facebook user ID.
 * @param width the desired image width
 * @param height the desired image height
 * @return an array of bytes containing the user's profile image.
 * @throws ApiException if there is an error while communicating with Facebook.
 */
byte[] getUserProfileImage(String userId, Integer width, Integer height);

/**
 * Retrieves a list of permissions that the application has been granted for the authenticated user.
 * @return the permissions granted for the user.
 * @throws ApiException if there is an error while communicating with Facebook.
 * @throws MissingAuthorizationException if FacebookTemplate was not created with an access token.
 */
List<Permission> getUserPermissions();

/**
 * Fetches IDs that the user has on any applications associated with the calling application via Facebook's Business Mapping API.
 * @return a list of ID-to-application mapping that the user has on related applications.
 */
List<UserIdForApp> getIdsForBusiness();

/**
 * Fetches a list of places that the user has checked into or has been tagged at.
 * @return a list of place tags for the user.
 */
List<PlaceTag> getTaggedPlaces();

/**
 * Searches for users.
 * @param query the search query (e.g., "Michael Scott")
 * @return a list of {@link Reference}s, each representing a user who matched the given query.
 * @throws ApiException if there is an error while communicating with Facebook.
 * @throws MissingAuthorizationException if FacebookTemplate was not created with an access token.
 */
PagedList<Reference> search(String query);

static final String[] PROFILE_FIELDS = {
    "id", "about", "age_range",/*"bio",*/ "birthday", "context", "cover", "currency", "devices", "education", "email", 
    "favorite_athletes", "favorite_teams", "first_name", "gender", "hometown", "inspirational_people", "installed", "install_type",
    "is_verified", "languages", "last_name", "link", "locale", "location", "meeting_for", "middle_name", "name", "name_format", 
    "political", "quotes", "payment_pricepoints", "relationship_status", "religion", "security_settings", "significant_other", 
    "sports", "test_group", "timezone", "third_party_id", "updated_time", "verified", "video_upload_limits", "viewer_can_send_gift", 
    "website", "work"
};

}

0
fciri