4

FacebookSDKを使用してユーザー情報と友達を収集しようとしています。理想的には、FBConnectionRequestではなくFBRequestを使用したいと思います。Facebook Developerページで詳しく説明されているように、情報の複数の要求にはFBRequestを使用し、1つだけにConnectionを使用するように指示されています。

FBRequestオブジェクトは、Facebookへの複数の接続を発行するために再利用できます。ただし、各FBRequestConnectionインスタンスは1つの接続を管理します。

ソース

私は現在、正常に機能しているFBRequestConnectionを次のように設定しています。

[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id<FBGraphUser> user, NSError *error) 

私が達成しようとしているのは、名前、ユーザー名、電子メールアドレスなどのユーザー情報を収集することです(これは上記で正常に機能します。私はすでにセッションを処理しました/これに対するアクセス許可を持っています。

次に、接続をFBRequestになるように変更する必要があります。これにより、次のデリゲートメソッドを使用できます。

- (void)request:(FBRequest *)request didLoad:(id)result {

次に、delegateメソッド内で、2番目のrequestForMyFriendsを呼び出し、1つのメソッドで両方の多くの情報を処理します。リクエストの作成はログインブロック内で完了し、次のようになります。

    FBRequest *request = [FBRequest requestForGraphPath:@"me/?fields=name,picture"];
    [request startWithCompletionHandler:NULL];

まず、これはこれにアプローチする正しい方法ですか?

次に、FBRequestに到達したときにエラーが発生するため、ここで問題が発生しているはずですが、何が間違っているのかわかりません。Facebookでこれ以上の情報を見つけることはできませんが、誰かがこの方法を使用してチュートリアルの正しい方向に私を向けることができれば、それも役立ちます。

編集-エラー ここに画像の説明を入力してください

編集2-追加のコードサンプル

// TODO : logging can be turned off/removed
[FBSettings setLoggingBehavior:[NSSet setWithObjects:FBLoggingBehaviorFBRequests, nil]];

NSDictionary *params = @{ @"fields" : @[ @"name", @"picture" ] };
FBRequest *request = [FBRequest requestWithGraphPath:@"me"
                                          parameters:params
                                          HTTPMethod:nil]; //nil will default on GET
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {}];
4

2 に答える 2

3

EXC_BAD_ACCESS空の完了ハンドラブロックをメソッドに渡すことができないため、エラーが発生します。

以下のコードはテストされており、意図したとおりに機能します。

FBRequest *request = [FBRequest requestForGraphPath:@"me/?fields=name,picture"];
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    NSLog(@"%@", result);
}];
于 2013-04-06T18:23:54.923 に答える
0

読み取りアクセスのみでユーザー権限を取得する

    let permissionsDesired = ["email", "public_profile", "user_friends"]

    let facebookLogin = FBSDKLoginManager()
    facebookLogin.logInWithReadPermissions(permissionsDesired,
                                        fromViewController: sender)
        { (facebookLogin:FBSDKLoginManagerLoginResult!, facebookError:NSError!) -> Void in

            if facebookError != nil
            {
                print("Facebook login. Error: \(facebookError.localizedDescription)")

                self.delegate?.permissionResults(false)
            }
            else
            {
                   // access granted, you can start 
                   //requesting user data now
                   self.requestUserInfo()
            }
    }

以下は、ユーザーに権限を付与した後にユーザーデータを取得する方法です。

func requestUserInfo( )
{

    let graphPath:String            = "me"
    let httpMethod:String           = "GET"
    var listOfrequest:String = String("about")
    listOfrequest = listOfrequest .stringByAppendingString(",age_range")
    listOfrequest = listOfrequest .stringByAppendingString(",bio")
    listOfrequest = listOfrequest .stringByAppendingString(",birthday")
    listOfrequest = listOfrequest .stringByAppendingString(",context")
    listOfrequest = listOfrequest .stringByAppendingString(",cover")
    listOfrequest = listOfrequest .stringByAppendingString(",currency")
    listOfrequest = listOfrequest .stringByAppendingString(",devices")
    listOfrequest = listOfrequest .stringByAppendingString(",education")
    listOfrequest = listOfrequest .stringByAppendingString(",email")
    listOfrequest = listOfrequest .stringByAppendingString(",favorite_athletes")
    listOfrequest = listOfrequest .stringByAppendingString(",favorite_teams")
    listOfrequest = listOfrequest .stringByAppendingString(",first_name")
    listOfrequest = listOfrequest .stringByAppendingString(",gender")
    listOfrequest = listOfrequest .stringByAppendingString(",hometown")
    listOfrequest = listOfrequest .stringByAppendingString(",id")
    listOfrequest = listOfrequest .stringByAppendingString(",inspirational_people")
    listOfrequest = listOfrequest .stringByAppendingString(",installed")
    listOfrequest = listOfrequest .stringByAppendingString(",install_type")
    listOfrequest = listOfrequest .stringByAppendingString(",is_shared_login")
    listOfrequest = listOfrequest .stringByAppendingString(",is_verified")
    listOfrequest = listOfrequest .stringByAppendingString(",languages")
    listOfrequest = listOfrequest .stringByAppendingString(",last_name")
    listOfrequest = listOfrequest .stringByAppendingString(",link")
    listOfrequest = listOfrequest .stringByAppendingString(",locale")
    listOfrequest = listOfrequest .stringByAppendingString(",location")
    listOfrequest = listOfrequest .stringByAppendingString(",meeting_for")
    listOfrequest = listOfrequest .stringByAppendingString(",middle_name")
    listOfrequest = listOfrequest .stringByAppendingString(",name")
    listOfrequest = listOfrequest .stringByAppendingString(",name_format")
    listOfrequest = listOfrequest .stringByAppendingString(",payment_pricepoints")
    listOfrequest = listOfrequest .stringByAppendingString(",picture")
    listOfrequest = listOfrequest .stringByAppendingString(",political")
    listOfrequest = listOfrequest .stringByAppendingString(",public_key")
    listOfrequest = listOfrequest .stringByAppendingString(",quotes")
    listOfrequest = listOfrequest .stringByAppendingString(",relationship_status")
    listOfrequest = listOfrequest .stringByAppendingString(",religion")
    listOfrequest = listOfrequest .stringByAppendingString(",security_settings")
    listOfrequest = listOfrequest .stringByAppendingString(",shared_login_upgrade_required_by")
    listOfrequest = listOfrequest .stringByAppendingString(",significant_other")
    listOfrequest = listOfrequest .stringByAppendingString(",sports")
    listOfrequest = listOfrequest .stringByAppendingString(",test_group")
    listOfrequest = listOfrequest .stringByAppendingString(",third_party_id")
    listOfrequest = listOfrequest .stringByAppendingString(",timezone")
    listOfrequest = listOfrequest .stringByAppendingString(",updated_time")
    listOfrequest = listOfrequest .stringByAppendingString(",verified")
    listOfrequest = listOfrequest .stringByAppendingString(",video_upload_limits")
    listOfrequest = listOfrequest .stringByAppendingString(",viewer_can_send_gift")
    listOfrequest = listOfrequest .stringByAppendingString(",website")
    listOfrequest = listOfrequest .stringByAppendingString(",work")

    let params:[NSObject:AnyObject] =  ["fields": listOfrequest ]

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: graphPath,
                                                            parameters: params,
                                                            HTTPMethod: httpMethod)


    graphRequest.startWithCompletionHandler(
        { (connection:FBSDKGraphRequestConnection!, userData:AnyObject!, error:NSError!) -> Void in

            if (error == nil)
            {
               print(userData) 
            }
            else
            {
                print("Error: \(error.localizedDescription)")
                //Handle error here
            }
    })

}//eom
于 2016-03-17T23:23:11.597 に答える