Получение имени пользователя и профиля с Facebook iOS 7
Я прочитал много учебников о получении информации от Facebook, но до сих пор не удалось. Я просто хочу получить имя пользователя и профиль из Facebook.
- (IBAction)login:(id)sender {
[FBSession openActiveSessionWithReadPermissions:@[@"email",@"user_location",@"user_birthday",@"user_hometown"]
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
switch (state) {
case FBSessionStateOpen:
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (error) {
NSLog(@"error:%@",error);
} else {
// retrive user details at here as shown below
NSLog(@"FB user first name:%@",user.first_name);
NSLog(@"FB user last name:%@",user.last_name);
NSLog(@"FB user birthday:%@",user.birthday);
NSLog(@"FB user location:%@",user.location);
NSLog(@"FB user username:%@",user.username);
NSLog(@"FB user gender:%@",[user objectForKey:@"gender"]);
NSLog(@"email id:%@",[user objectForKey:@"email"]);
NSLog(@"location:%@", [NSString stringWithFormat:@"Location: %@\n\n",
user.location[@"name"]]);
}
}];
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
} ];
}
Я использовал этот код для получения информации, но я не могу получить никакой информации.
Можете ли вы мне помочь? или Можете ли вы предпочесть учебник для его чтения? Я прочитал учебники на developer.facebook.com.
Благодарим вас за интерес.
Ответы
Ответ 1
Это самый простой способ получить изображение профиля пользователя.
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *FBuser, NSError *error) {
if (error) {
// Handle error
}
else {
NSString *userName = [FBuser name];
NSString *userImageURL = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", [FBuser objectID]];
}
}];
Другими параметрами запроса, которые могут быть использованы, являются:
- тип: маленький, нормальный, большой, квадратный
- width: < значение >
- height: < значение >
- Используйте как ширину, так и высоту, чтобы получить обрезанное изображение с аспектным заполнением.
Ответ 2
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{ @"fields" : @"id,name,picture.width(100).height(100)"}]startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSString *nameOfLoginUser = [result valueForKey:@"name"];
NSString *imageStringOfLoginUser = [[[result valueForKey:@"picture"] valueForKey:@"data"] valueForKey:@"url"];
NSURL *url = [[NSURL alloc] initWithURL: imageStringOfLoginUser];
[self.imageView setImageWithURL:url placeholderImage: nil];
}
}];
}
Ответ 3
Сделайте следующий запрос Графа:
/me?fields=name,picture.width(720).height(720){url}
И вы получите действительно большое и крутое изображение профиля:
{
"id": "459237440909381",
"name": "Victor Mishin",
"picture": {
"data": {
"url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpf1/t31.0-1/c628.148.1164.1164/s720x720/882111_142093815957080_669659725_o.jpg"
}
}
}
P.S. /me?fields=picture.type(large)
не делает этого для меня.
Ответ 4
Вы также можете получить имя пользователя и картинку следующим образом:
[FBSession openActiveSessionWithReadPermissions:@[@"basic_info"]
allowLoginUI:YES
completionHandler:
^(FBSession *session, FBSessionState state, NSError *error) {
if(!error && state == FBSessionStateOpen) {
{ [FBRequestConnection startWithGraphPath:@"me" parameters:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"id,name,first_name,last_name,username,email,picture",@"fields",nil] HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSDictionary *userData = (NSDictionary *)result;
NSLog(@"%@",[userData description]);
}];
}
}
}];
Output:
picture = {
data = {
"is_silhouette" = 0;
url = "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-frc1/t5.0-1/xxxxxxxxx.jpg";
};
};
username = xxxxxxxxx;
Вы можете просто оставить параметр для изображения и имени пользователя и исключить других на основе вашего требования. НТН.
Ответ 5
Это код для Facebook SDK 4 и Swift:
if FBSDKAccessToken.currentAccessToken() != nil {
FBSDKGraphRequest(graphPath: "me", parameters: nil).startWithCompletionHandler({ (connection, result, error) -> Void in
println("This logged in user: \(result)")
if error == nil{
if let dict = result as? Dictionary<String, AnyObject>{
println("This is dictionary of user infor getting from facebook:")
println(dict)
}
}
})
}
ОБНОВЛЕНИЕ ВОПРОСОВ ОТВЕТОВ:
Чтобы загрузить изображение общего профиля, вы получите идентификатор facebook из словаря:
let facebookID:NSString = dict["id"] as AnyObject? as NSString
И затем вызовите запрос на графический API для изображения профиля, используя идентификатор facebook:
let pictureURL = "https://graph.facebook.com/\(fbUserId)/picture?type=large&return_ssl_resources=1"
Пример кода:
let pictureURL = "https://graph.facebook.com/\(fbUserId)/picture?type=large&return_ssl_resources=1"
//
var URLRequest = NSURL(string: pictureURL)
var URLRequestNeeded = NSURLRequest(URL: URLRequest!)
println(pictureURL)
NSURLConnection.sendAsynchronousRequest(URLRequestNeeded, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!, error: NSError!) -> Void in
if error == nil {
//data is the data of profile image you need. Just create UIImage from it
}
else {
println("Error: \(error)")
}
})
Ответ 6
Фактически использование http://graph.facebook.com//picture? type = small" для получения изображения профиля пользователя или даже их друзей происходит медленно.
Лучший и быстрый способ сделать это, чтобы добавить объект FBProfilePictureView к вашему представлению и в нем свойство profileID, назначить идентификатор пользователя Facebook.
Например:
FBProfilePictureView * friendsPic;
friendsPic.profileID = @ "1379925668972042";
Ответ 7
Посмотрите этот lib:
https://github.com/jonasman/JNSocialDownload
вы даже можете получить твиттер