ios - for - Solicitud GET de la API de Facebook Graph: debe contener el parámetro "campos"(Swift, Facebook SDK v4.5.1)
login button facebook swift (5)
Mi aplicación iOS utiliza la solicitud Graph API de Facebook durante el registro para obtener información del usuario, que funcionó bien antes de actualizar al SDK más nuevo de Facebook. Después de la actualización, recibo un error de tiempo de ejecución que dice: "FBSDKLog: comenzando con Graph API v2.4, las solicitudes GET para / me deberían contener un" parámetro "de campos" explícito.
Aquí está el código:
func requestFacebook() {
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
println("Error: /(error)")
}
else if error == nil
{
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
var currentDate = NSDate()
var birthdayFormatter = NSDateFormatter()
let userCalendar = NSCalendar.currentCalendar()
birthdayFormatter.dateFormat = "MM/DD/YYYY"
var birthdayNSDate = birthdayFormatter.dateFromString(birthday as String)
var userAge = self.calculateAge(birthdayNSDate!)
PFUser.currentUser()!["age"] = userAge
var facebookID: NSString = (result.valueForKey("id") as? NSString)!
var pictureURL = "https://graph.facebook.com//(facebookID)/picture?type=large&return_ssl_resources=1"
var URLRequest = NSURL(string: pictureURL)
var URLRequestNeeded = NSURLRequest(URL: URLRequest!)
NSURLConnection.sendAsynchronousRequest(URLRequestNeeded, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!, error: NSError!) -> Void in
if error == nil {
var picture = PFFile(data: data)
PFUser.currentUser()!["picture"] = picture
PFUser.currentUser()!.saveInBackgroundWithBlock({ (success, error) -> Void in
if error == nil {
var userPicture:PFFile = PFUser.currentUser()!.valueForKey("picture") as! PFFile
userPicture.getDataInBackgroundWithBlock { (imageData, error) -> Void in
if error == nil {
self.meProfileImageView.image = UIImage(data: imageData!)
var userName:String = PFUser.currentUser()!.valueForKey("username") as! String
var userAge:Int = PFUser.currentUser()!.valueForKey("age") as! Int
self.meLabel.text = "/(userName), /(userAge)"
self.findFriends()
}
}
} else {
println(error)
}
})
}
else {
println("Error: /(error.localizedDescription)")
}
})
}
})
}
El mensaje de error está en la línea:
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
Este código funcionó perfectamente bien antes de actualizar al SDK v4.5.1 de Facebook, pero no sé qué cambiar para que esto funcione ahora. ¡Muchas gracias a cualquiera que pueda ayudarme!
En Obj-C, inserte en el método logInWithReadPermissions:
parameters:@{@"fields": @"id, name, email"}
si deja nil en los parámetros, solo recibirá id y nombre en el objeto de resultado, aunque haya configurado, por ejemplo:
NSArray *permissionsArray = @[ @"email", @"public_profile"];
No está muy claro en la documentación, espero que pueda ayudar.
En Swift, puede declarar múltiples parámetros como este:
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])
Tuve el mismo problema, pero agregar opciones de campo generaría un error de solicitud al recuperar la foto del usuario.
Resolví este problema agregando
parameters:@{@"fields": @""}
simples
parameters:@{@"fields": @""}
al código:
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"me/picture"]
parameters:@{@"fields": @""}
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result,
NSError *error) {
if (!error) {
// success
} else {
// fail
}}
];
esta línea necesita un valor de parámetro que NO sea nulo
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
Expandiré más, por ejemplo, y este es el tipo de código psuedo:
entonces para ObjC sería esto, por ejemplo, entonces lo anterior leería lo siguiente:
parameters:@{@"fields": @"id, name"}
En poco tiempo sería algo similar
algo como esto:
parameters:["fields": "email"]
Esto es solo para dos campos, y nuevamente es código psuedo, pero debe especificar los parámetros
ACTUALIZAR:
Estoy agregando esta actualización para mostrar a la gente dónde encuentra los parámetros para los campos como se describe anteriormente, aquí hay un enlace rápido:
Aquí está la información del campo Parámetros (esto debería permanecer más o menos estático con FBSDK, algo de esto es "núcleo", lo que significa que realmente no cambiará mucho, pero lo actualizaré siempre que pueda):
https://developers.facebook.com/docs/graph-api/reference/user
El formato de la información a continuación es el siguiente, más o menos, lo hice rápidamente:
"parámetro" "tipo"
"descripción"
cadena numérica de identificación
La identificación de la cuenta de usuario de esta persona. Este ID es exclusivo de cada aplicación y no se puede usar en diferentes aplicaciones. Nuestra guía de actualización proporciona más información sobre ID específicos de la aplicación
sobre cuerda
La sección Acerca de mí del perfil de esta persona
age_range AgeRange
El segmento de edad para esta persona expresado como una edad mínima y máxima. Por ejemplo, más de 18, menos de 21.
cuerda bio
La biografía de la persona
cadena de cumpleaños
El cumpleaños de la persona. Esta es una cadena de formato fijo, como MM / DD / AAAA. Sin embargo, las personas pueden controlar quién puede ver el año en que nacieron por separado del mes y el día, por lo que esta cadena puede ser solo el año (AAAA) o el mes + día (MM / DD)
contexto UserContext
Contexto social para esta persona.
moneda Moneda
La información de la moneda local de la persona.
lista de dispositivos
La lista de dispositivos que usa la persona. Esto devolverá solo dispositivos iOS y Android
lista educativa
La educación de la persona
cadena de correo electrónico
La dirección de correo electrónico principal de la persona que figura en su perfil. Este campo no se devolverá si no hay una dirección de correo electrónico válida disponible
lista de deportistas favoritos
Atletas que le gustan a la persona
lista de equipos favoritos
Equipos deportivos que le gustan a la persona
cadena first_name
El nombre de la persona
cadena de género
El género seleccionado por esta persona, hombre o mujer. Este valor se omitirá si el género se establece en un valor personalizado
Página de la ciudad natal
La ciudad natal de la persona.
lista de personas inspiradoras
Las personas inspiradoras de la persona.
install_type enum
Tipo de instalación
bool instalado
¿Está instalada la aplicación que realiza la solicitud?
lista de interesados
Géneros en los que la persona está interesada
is_shared_login bool
¿Es este un inicio de sesión compartido (por ejemplo, un usuario gris)
está_verificado bool
Las personas con un gran número de seguidores pueden tener la autenticidad de su identidad verificada manualmente por Facebook. Este campo indica si el perfil de la persona se verifica de esta manera. Esto es distinto del campo verificado
lista de idiomas
Páginas de Facebook que representan los idiomas que esta persona conoce
cadena de apellido
El apellido de la persona
cadena de enlace
Un enlace a la línea de tiempo de la persona
Página de ubicación
La ubicación actual de la persona tal como la ingresó en su perfil. Este campo no está relacionado con los registros
cadena local
El local de la persona
reunión_para lista
Para qué está interesada la persona en reunirse
** cadena de nombre_medio
El segundo nombre de la persona
cadena de nombre
El nombre completo de la persona
CoreDefault
cadena de formato de nombre
El nombre de la persona formateada para manejar correctamente los pedidos en chino, japonés o coreano.
Payment_pricepoints PaymentPricepoints
Los precios de pago de la persona
test_group unsigned int32
Grupo de prueba de la plataforma
cadena política
Las opiniones políticas de la persona.
cadena de estado de relación
El estado de la relación de la persona.
cadena de religión
La religión de la persona
security_settings SecuritySettings
Configuraciones de seguridad
significativo_otro usuario
El otro significante de la persona
lista de deportes
Deportes que le gustan a esta persona
cadena de citas
Las citas favoritas de la persona.
string de third_party_id
Una cadena que contiene un identificador anónimo, pero único para la persona. Puedes usar este identificador con terceros
zona horaria flotante (min: -24) (max: 24)
La zona horaria actual de la persona compensada por UTC
cadena token_for_business
Un token que es igual en todas las aplicaciones de una empresa. El acceso a este token requiere que la persona inicie sesión en su aplicación. Este token cambiará si la empresa propietaria de la aplicación cambia
updated_time datetime
Tiempo actualizado
shared_login_upgrade_required_by datetime
El tiempo que el inicio de sesión compartido necesita ser actualizado a Business Manager por
bool verificado
Indica si la cuenta ha sido verificada. Esto es distinto del campo is_verified. Alguien se considera verificado si realiza alguna de las siguientes acciones:
Register for mobile Confirm their account via SMS Enter a valid credit card
video_upload_limits VideoUploadLimits
Límites de carga de video
viewer_can_send_gift bool
¿Puede el espectador enviar un regalo a esta persona?
cadena de sitio web
El sitio web de la persona
lista de trabajo
Detalles de la experiencia laboral de una persona
cadena public_key
La clave pública PGP de la persona
cover CoverPhoto
Además, aquí está el material actual de "Edge": El formato para el material de "Edge" es el siguiente, más o menos, lo hice rápidamente:
"Borde"
"Descripción"
favoritos_requests
Solicitudes favoritas de los desarrolladores a la API Graph
request_history
Historial de solicitudes de API de Graph para desarrolladores
cuentas
Páginas de Facebook que esta persona administra / es administrador de
logros
Logros realizados en juegos de Facebook
Adaccounts
Las cuentas publicitarias a las que esta persona tiene acceso
adaccountgroups
Grupos de cuentas de anuncios
contratos
Los contratos publicitarios de la persona
grupos_administrados
Agrupa los administradores de usuarios
adnetworkanalytics
Datos de información para las aplicaciones de la red de audiencia de la persona
Álbumes
Los álbumes de fotos que ha creado esta persona
solicitudes
Las solicitudes pendientes de esta persona de una aplicación
apprequestformerrecipients
Solicitudes de aplicaciones
libros
Los libros que figuran en el perfil de esta persona.
dominios
Los dominios que administra el usuario
eventos
Eventos para esta persona. Por defecto, esto no incluye eventos que la persona ha rechazado o no respondió
familia
Las relaciones familiares de esta persona.
stream_filters
Una lista de filtros que se pueden aplicar al borde de la fuente de noticias
listas de amigos
Las listas de amigos personalizadas de la persona.
ids_for_business
Las entidades comerciales pueden reclamar la propiedad de múltiples aplicaciones usando el Administrador de Negocios. Este borde devuelve la lista de ID que este usuario tiene en cualquiera de esas otras aplicaciones
invitable_friends
Una lista de amigos que pueden ser invitados a instalar una aplicación de Facebook Canvas
juegos
Juegos que le gustan a esta persona
grupos
Los grupos de Facebook a los que pertenece la persona
gustos
Todas las páginas que le han gustado a esta persona
películas
Películas que le gustan a esta persona
música
Música que le gusta a esta persona
objetos
Objetos
permisos
Los permisos que la persona ha otorgado a esta aplicación
fotos
Fotos en las que la persona está etiquetada o ha subido
imagen
La foto de perfil de la persona
tagged_places
Lista de lugares etiquetados para esta persona. Puede incluir etiquetas en videos, publicaciones, estados o enlaces
dominios_provocables
Todos los dominios que el usuario puede promover
eventos_provocables
Todos los eventos que el usuario puede promocionar.
taggable_friends
Amigos que pueden etiquetarse en contenido publicado a través de Graph API
televisión
Programas de televisión que le gustan a esta persona
videos
Videos en los que la persona está etiquetada o cargada
video_broadcasts
Transmisiones de video de esta persona
aplicaciones
Las aplicaciones de Facebook de las cuales esta persona es desarrolladora.
registros
Los registros que ha realizado esta persona.
alimentar
El feed de publicaciones (incluidas las actualizaciones de estado) y los enlaces publicados por esta persona.
peticiones de amistad
Las solicitudes de amistad pendientes de una persona.
amigos
Los amigos de una persona.
casa
El feed de la página de inicio de una persona en Facebook.
bandeja de entrada
La bandeja de entrada de mensajes de Facebook de una persona.
ubicaciones
Una fuente de publicaciones y fotos que incluye información de ubicación y en la que esta persona ha sido etiquetada. Esto es útil para construir una cronología de los lugares que la persona ha visitado.
amigos en común
La lista de amigos mutuos entre dos personas.
notificaciones
Las notificaciones de Facebook no leídas que tiene una persona.
bandeja de salida
La bandeja de salida de mensajes de Facebook de una persona.
preguntas
Las preguntas que una persona ha creado.
puntuaciones
Los puntajes que ha recibido esta persona de los juegos de Facebook que han jugado.
suscriptores
Los perfiles que siguen a esta persona.
suscrito a
El perfil que esta persona está siguiendo.
use "campos" como clave y luego separe sus valores por coma
let params = ["fields": "email, friends"]