Facebook Graph API GET 요청- "fields"매개 변수를 포함해야합니다 (Swift, Facebook SDK v4.5.1).
내 iOS 앱은 가입 중에 Facebook의 Graph API 요청을 사용하여 사용자 정보를 얻습니다. Facebook의 최신 SDK로 업그레이드하기 전에 제대로 작동했습니다. 업그레이드 후 "FBSDKLog : Graph API v2.4부터 시작하여 / me에 대한 GET 요청에는 명시 적"fields "매개 변수가 포함되어야합니다"라는 런타임 오류가 표시됩니다.
다음은 코드입니다.
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)")
}
})
}
})
}
오류 메시지는 다음 줄에 있습니다.
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
이 코드는 Facebook의 SDK v4.5.1로 업그레이드하기 전에 완벽하게 작동했지만 지금이 작업을 수행하기 위해 무엇을 변경해야할지 모르겠습니다. 나를 도울 수있는 사람에게 큰 감사를드립니다!
이 줄에는 nil이 아닌 매개 변수 값이 필요합니다.
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
예를 들어, 더 확장 해 보겠습니다. 이것은 일종의 유사 코드입니다.
예를 들어 ObjC의 경우 이것은 다음과 같으므로 위의 내용은 다음과 같습니다.
parameters:@{@"fields": @"id, name"}
신속하게 그것은 비슷한 것입니다
이 같은:
parameters:["fields": "email"]
이것은 단지 두 개의 필드를위한 것이며 다시 가짜 코드이지만 매개 변수를 지정해야합니다.
최신 정보:
위에서 설명한대로 필드에 대한 매개 변수를 찾는 사람들을 보여주기 위해이 업데이트를 추가했습니다. 여기에 빠른 링크가 있습니다.
다음은 Paramters 필드 정보입니다 (이는 FBSDK에서 거의 정적으로 유지되어야합니다.이 중 일부는 "코어"이므로 실제로 많이 변경되지는 않지만 가능할 때마다 업데이트합니다) :
https://developers.facebook.com/docs/graph-api/reference/user
아래 정보의 형식은 다음과 같습니다. 방금이 작업을 빠르게 수행했습니다.
"매개 변수" "유형"
"기술"
id 숫자 문자열
이 사람의 사용자 계정 ID입니다. 이 ID는 각 앱에 고유하며 다른 앱에서 사용할 수 없습니다. 업그레이드 가이드는 앱별 ID에 대한 자세한 정보를 제공합니다.
문자열 에 대해
이 사람 프로필의 내 정보 섹션
age_range AgeRange
이 사람의 연령 세그먼트는 최소 및 최대 연령으로 표시됩니다. 예를 들어, 18 세 이상, 21 세 미만입니다.
바이오 스트링
그 사람의 약력
생일 문자열
그 사람의 생일. MM / DD / YYYY와 같은 고정 형식 문자열입니다. 그러나 사람들은 자신이 태어난 연도를 월, 일과 별도로 볼 수있는 사람을 제어 할 수 있으므로이 문자열은 연도 (YYYY) 또는 월 + 일 (MM / DD) 만 가능합니다.
컨텍스트 UserContext
이 사람의 사회적 맥락
통화 통화
개인의 현지 통화 정보
장치 목록
사용자가 사용중인 장치 목록입니다. iOS 및 Android 기기 만 반환됩니다.
교육 목록
그 사람의 교육
이메일 문자열
프로필에 나열된 사람의 기본 이메일 주소입니다. 유효한 이메일 주소가없는 경우이 필드는 반환되지 않습니다.
favorite_athletes 목록
그 사람이 좋아하는 선수
favorite_teams 목록
그 사람이 좋아하는 스포츠 팀
first_name 문자열
그 사람의 이름
성별 문자열
이 사람이 선택한 성별, 남성 또는 여성. 성별이 맞춤 값으로 설정된 경우이 값은 생략됩니다.
고향 페이지
그 사람의 고향
inspirational_people 목록
그 사람의 영감을주는 사람들
install_type 열거 형
설치 유형
부울 설치
요청하는 앱이 설치되어 있습니까?
관심있는 _ 목록
관심있는 성별
is_shared_login bool
공유 로그인입니까 (예 : 회색 사용자)
is_verified bool
팔로워 수가 많은 사람들은 Facebook에서 수동으로 신원을 확인할 수 있습니다. 이 필드는 개인의 프로필이 이러한 방식으로 확인되었는지 여부를 나타냅니다. 이것은 확인 된 필드와 다릅니다.
언어 목록
이 사람이 알고있는 언어를 나타내는 Facebook 페이지
last_name 문자열
그 사람의 성
링크 문자열
그 사람의 타임 라인에 대한 링크
위치 페이지
프로필에 입력 한 사람의 현재 위치입니다. 이 필드는 체크인과 관련이 없습니다.
로케일 문자열
그 사람의 로케일
meeting_for 목록
회의에 관심이있는 사람
** middle_name 문자열
그 사람의 중간 이름
이름 문자열
그 사람의 이름
CoreDefault
이름 _ 형식 문자열
중국어, 일본어 또는 한국어 주문을 올바르게 처리 할 수 있도록 형식이 지정된 사람의 이름
payment_pricepoints PaymentPricepoints
그 사람의 지불 가격
test_group unsigned int32
플랫폼 테스트 그룹
정치적 끈
그 사람의 정치적 견해
relationship_status 문자열
그 사람의 관계 상태
종교 문자열
그 사람의 종교
security_settings SecuritySettings
보안 설정
중요한 _ 다른 사용자
그 사람의 중요한 타인
스포츠 목록
이 사람이 좋아하는 스포츠
따옴표 문자열
그 사람이 가장 좋아하는 인용구
third_party_id 문자열
익명이지만 개인에 대한 고유 한 식별자를 포함하는 문자열입니다. 이 식별자를 타사와 함께 사용할 수 있습니다.
시간대 부동 (최소 : -24) (최대 : 24)
UTC에서 사람의 현재 시간대 오프셋
token_for_business 문자열
비즈니스 앱에서 동일한 토큰입니다. 이 토큰에 액세스하려면 사용자가 앱에 로그인해야합니다. 이 토큰은 앱을 소유 한 비즈니스가 변경되면 변경됩니다.
updated_time datetime
업데이트 된 시간
shared_login_upgrade_required_by datetime
공유 로그인을 비즈니스 관리자로 업그레이드해야하는 시간
확인 된 bool
계정이 확인되었는지 여부를 나타냅니다. is_verified 필드와 다릅니다. 누군가 다음 조치 중 하나를 취하면 검증 된 것으로 간주됩니다.
Register for mobile Confirm their account via SMS Enter a valid credit card
video_upload_limits VideoUploadLimits
동영상 업로드 제한
viewer_can_send_gift bool
시청자가이 사람에게 선물을 보낼 수 있나요?
웹 사이트 문자열
그 사람의 웹 사이트
작업 목록
개인의 업무 경험에 대한 세부 정보
public_key 문자열
개인의 PGP 공개 키
커버 CoverPhoto
또한, 다음은 현재 "Edge"항목입니다. "Edge"항목의 형식은 다음과 같습니다. 대략적으로이 작업을 빠르게 수행했습니다.
"가장자리"
"기술"
favorite_requests
그래프 API에 대한 개발자의 선호하는 요청
request_history
개발자의 Graph API 요청 내역
계정
이 사람이 관리 / 관리하는 Facebook 페이지
업적
Facebook 게임에서 얻은 성과
adaccounts
이 사람이 액세스 할 수있는 광고 계정
adaccountgroups
광고 계정 그룹
adcontracts
그 사람의 광고 계약
admined_groups
사용자 관리자 그룹
adnetworkanalytics
개인의 Audience Network 앱에 대한 통찰력 데이터
앨범
이 사람이 만든 사진 앨범
apprequests
이 사람의 대기중인 앱 요청
apprequestformerrecipients
앱 요청
서적
이 사람의 프로필에 나열된 책
도메인
사용자가 관리하는 도메인
이벤트
이 사람을위한 이벤트. 기본적으로 여기에는 해당 사용자가 거절했거나 응답하지 않은 이벤트가 포함되지 않습니다.
가족
이 사람의 가족 관계.
stream_filters
뉴스 피드 에지에 적용 할 수있는 필터 목록
친구 목록
그 사람의 맞춤 친구 목록
ids_for_business
비즈니스 주체는 비즈니스 관리자를 사용하여 여러 앱의 소유권을 주장 할 수 있습니다. 이 에지는이 사용자가 다른 앱에있는 ID 목록을 반환합니다.
invitable_friends
Facebook Canvas 앱을 설치하도록 초대 할 수있는 친구 목록
계략
이 사람이 좋아하는 게임
여러 떼
그 사람이 속한 Facebook 그룹
좋아요
이 사람이 좋아 한 모든 페이지
영화 산업
이 사람이 좋아하는 영화
music
Music this person likes
objects
Objects
permissions
The permissions that the person has granted this app
photos
Photos the person is tagged in or has uploaded
picture
The person's profile picture
tagged_places
List of tagged places for this person. It can include tags on videos, posts, statuses or links
promotable_domains
All the domains user can promote
promotable_events
All the events which user can promote.
taggable_friends
Friends that can be tagged in content published via the Graph API
television
TV shows this person likes
videos
Videos the person is tagged in or uploaded
video_broadcasts
Video broadcasts from this person
applications
The Facebook apps that this person is a developer of.
checkins
The checkins this person has made.
feed
The feed of posts (including status updates) and links published by this person.
friendrequests
A person's pending friend requests.
friends
A person's friends.
home
A person's Facebook homepage feed.
inbox
A person's Facebook Messages inbox.
locations
A feed of posts and photos that include location information and in which this person has been tagged. This is useful for constructing a chronology of places that the person has visited.
mutualfriends
The list of mutual friends between two people.
notifications
The unread Facebook notifications that a person has.
outbox
A person's Facebook Messages outbox.
questions
The questions that a person has created.
scores
The scores this person has received from Facebook Games that they've played.
subscribers
The profiles that are following this person.
subscribedto
The profile that this person is following.
use "fields" as Key and then comma separate your values
let params = ["fields": "email, friends"]
In Obj-C insert in the logInWithReadPermissions method:
parameters:@{@"fields": @"id, name, email"}
if you leave nil in parameters you only receive id and name in the result object, although you have set for example:
NSArray *permissionsArray = @[ @"email", @"public_profile"];
It´s not very clear in the documentation, hope it can helps.
I had the same problem, but adding field options would generate a request error when fetching the user photo. I solved this problem by adding a simple parameters:@{@"fields": @""}
to the code:
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
}}
];
In Swift, you can declare multiple parameters like this:
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])
ReferenceURL : https://stackoverflow.com/questions/32031677/facebook-graph-api-get-request-should-contain-fields-parameter-swift-faceb
'IT TIP' 카테고리의 다른 글
Android-파일 공급자-권한 거부 (0) | 2020.12.26 |
---|---|
Google 인앱 결제, IllegalArgumentException : Android L Dev Preview로 업그레이드 한 후 서비스 의도가 명시 적이어야합니다. (0) | 2020.12.26 |
오류 : npm ERR! (0) | 2020.12.26 |
업데이트 패널을 새로 고친 후 일부 자바 스크립트를 어떻게 실행할 수 있습니까? (0) | 2020.12.26 |
한 텍스트에서 다른 텍스트로 jQuery 텍스트 페이드 / 전환? (0) | 2020.12.26 |