ios - mis - porque no carga facebook en mi iphone
iOS: busca amigos de Facebook con paginaciĆ³n usando ''siguiente'' (2)
He encontrado todas las respuestas. La mayoría de las respuestas sugiere una paginación basada en URL o una función de llamada recursiva. Podemos hacer esto desde el propio SDK de Facebook.
var friendsParams = "taggable_friends"
// Save the after cursor in your data model
if let nextPageCursor = user?.friendsNextPages?.after {
friendsParams += ".limit(10)" + ".after(" + nextPageCursor + ")"
} else {
self.user?.friends.removeAll()
}
let requiredParams = friendsParams + "{id, name, first_name, last_name, picture.width(200).height(200)}"
let params = ["fields": requiredParams]
let _ = FBSDKGraphRequest(graphPath: "me", parameters: params).start { connection, response, error in
if connection?.urlResponse.statusCode == 200 {
print("/(response)")
// Update the UI and next page (after) cursor
} else {
print("Not able to fetch /(error)")
}
}
También puedes encontrar el proyecto de ejemplo aquí
Estoy tratando de buscar la lista de ''taggable_friends'' de Facebook, donde puede haber más de 1000 amigos etiquetables, por lo que Facebook pagina los resultados. Aquí está el método.
-(void)getsFbTaggableFriends:(NSString *)nextCursor dicFBFriends:(NSMutableArray *) dicFriends failure:(void (^) (NSError *error))failureHandler
{
NSString *qry = @"/me/taggable_friends";
NSMutableDictionary *parameters;
if (nextCursor == nil) {
parameters = nil;
}
else {
parameters = [[NSMutableDictionary alloc] init];
[parameters setValue:nextCursor forKey:@"next"];
}
[FBRequestConnection startWithGraphPath:qry
parameters:parameters
HTTPMethod:@"GET"
completionHandler:^(
FBRequestConnection *connection,
id result,
NSError *error
) {
if (error) {
NSLog(@"%@", [error localizedDescription]);
}else {
/* handle the result */
NSMutableDictionary *mDicResult = [[NSMutableDictionary alloc]initWithDictionary:result];
for (NSDictionary * fbItem in [mDicResult valueForKey:@"data"])
{
[dicFriends addObject:fbItem];
}
// if ''next'' value is found, then call recursively
if ([[mDicResult valueForKey:@"paging"] objectForKey:@"next"] != nil) {
NSString *nextCursor = mDicResult[@"paging"][@"next"];
NSLog(@"next:%@", [nextCursor substringFromIndex:27]);
[self getsFbTaggableFriends:nextCursor dicFBFriends:dicFriends failure:^(NSError *error) {
failureHandler(error);
}];
}
}
}];
}
Problema: obtengo los primeros 1000 registros en el objeto ''resultado'' y el valor de la ''siguiente'' se pasa como el parámetro ''parámetros'' para la llamada recursiva. Sin embargo, la segunda iteración no pagina y sigue devolviendo los mismos 1000 registros.
También intenté usar el valor nextCursor
como el parámetro startWithGraphPath
para la segunda llamada. Resultó en un objeto de respuesta diferente con claves como og_object
, share
, id
lugar de data
& paging
.
Ayúdenos a obtener apropiadamente los amigos etiquetables página por página, siempre y cuando el valor "siguiente" esté presente en el objeto de respuesta. Gracias.
Utilice el next
punto final devuelto (parte de ruta de gráfico, incluido el cursor) como la nueva ruta de gráfico para la solicitud posterior, en lugar de ponerlo como el parámetro.