IOSアプリのFacebookの友達リストを取得しようとしましたが、Facebookから空の応答を受け取りました。
フェイスブックの友達リストをすばやく取得するにはどうすればよいですか?
Graph API v2.0以降では、/ me/friendsを呼び出すと、同じアプリをインストールした人の友達が返されます。さらに、各ユーザーにuser_friends権限を要求する必要があります。 user_friendsは、すべてのログインにデフォルトで含まれなくなりました。/me/friendsへの応答に表示するには、各ユーザーにuser_friends権限を付与する必要があります。
アプリを使用している友達のリストを取得するには、次のコードを使用します。
let params = ["fields": "id, first_name, last_name, middle_name, name, email, picture"]
let request = FBSDKGraphRequest(graphPath: "me/friends", parameters: params)
request.startWithCompletionHandler { (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
if error != nil {
let errorMessage = error.localizedDescription
/* Handle error */
}
else if result.isKindOfClass(NSDictionary){
/* handle response */
}
}
アプリを使用していない友達のリストにアクセスする場合は、次のコードを使用します。
let params = ["fields": "id, first_name, last_name, middle_name, name, email, picture"]
let request = FBSDKGraphRequest(graphPath: "me/taggable_friends", parameters: params)
request.startWithCompletionHandler { (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
if error != nil {
let errorMessage = error.localizedDescription
}
else if result.isKindOfClass(NSDictionary){
/* Handle response */
}
}
友達リストを取得するには、ログイン時にユーザー権限ser_friendsを許可する必要があります。 Swift 3.の場合、友達リストを取得するための以下のコードを追加します。
let params = ["fields": "id, first_name, last_name, middle_name, name, email, picture"]
FBSDKGraphRequest(graphPath: "me/taggable_friends", parameters: params).start { (connection, result , error) -> Void in
if error != nil {
print(error!)
}
else {
print(result!)
//Do further work with response
}
}
私はそれがうまくいくことを願っています!
アプリを使用している友達だけがフェッチされ、ログ記録中にユーザーにuser_friendsの読み取り権限を取得する必要があることに注意してください。
var fbRequest = FBSDKGraphRequest(graphPath:"/me/friends", parameters: nil);
fbRequest.startWithCompletionHandler { (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
if error == nil {
println("Friends are : \(result)")
} else {
println("Error Getting Friends \(error)");
}
}
参照: https://developers.facebook.com/docs/graph-api/reference/v2.3/user/friends#read
私の問題を解決したここで組合を作るだけです:
Dheeraj Singhからアプリを使って友達を作る:
var request = FBSDKGraphRequest(graphPath:"/me/friends", parameters: nil);
request.startWithCompletionHandler { (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
if error == nil {
println("Friends are : \(result)")
} else {
println("Error Getting Friends \(error)");
}
}
そしてすべてのFacebookの友達を取得、Meghs Dhameliyaから、Swiftに移植:
var request = FBSDKGraphRequest(graphPath:"/me/taggable_friends", parameters: nil);
request.startWithCompletionHandler { (connection : FBSDKGraphRequestConnection!, result : AnyObject!, error : NSError!) -> Void in
if error == nil {
println("Friends are : \(result)")
} else {
println("Error Getting Friends \(error)");
}
}
taggable_friendsを使用して友達リストを取得できます ユーザーのタグ付け可能な友達のグラフAPIリファレンス
/* make the API call */
[FBRequestConnection startWithGraphPath:@"/me/taggable_friends"
completionHandler:^(
FBRequestConnection *connection,
id result,
NSError *error
) {
/* handle the result */
}];
スウィフト-4
これは、同じアプリを使用しているFacebookの友達のみを返します。
// First you have to check that `user_friends` has associated with your `Access Token`, If you are getting false, please allow allow this field while you login through facebook.
if FBSDKAccessToken.current().hasGranted("user_friends") {
// Prepare your request
let request = FBSDKGraphRequest.init(graphPath: "me/friends", parameters: params, httpMethod: "GET")
// Make a call using request
let _ = request?.start(completionHandler: { (connection, result, error) in
print("Friends Result: \(String(describing: result))")
})
}
user_friends権限があれば、友達のリストにアクセスできますそれもアプリを使用するので、アプリがそうでない場合友達が使用すると、リストは空になります。 ser_friends権限 参照を参照してください