2

まず第一に、私は Facebook SDK を使用したくないので、これを行うことができましたが、これは機能していますが、ユーザーのメールを取得する方法がわかりません。

ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:accountTypeName];

NSDictionary *options;

if ( [accountTypeName isEqualToString:ACAccountTypeIdentifierFacebook]){
    options = @{
                ACFacebookAppIdKey: @"601517946570890"
                ,ACFacebookPermissionsKey: @[@"email"]
                };
}

[account requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error)
 {
     if (granted == YES)
     {
         NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];

         if ([arrayOfAccounts count] > 0)
         {
             _account = [arrayOfAccounts lastObject];

             NSDictionary *dict = @{
                                    @"name": [_account userFullName] == nil ? [_account username] : [_account userFullName],
                                    @"account_id": [_account identifier],
                                    @"email": @"??"
                                    };

             NSLog(@"account info: %@",dict);
         }
     }
 }];

ACAccount にはユーザーの電子メールを返すプロパティがないため、SLRequest を介して行う必要があるかどうかを確認しようとしましたが、見つかりませんでした。

出来ますか?

4

2 に答える 2

5

Facebook からユーザーのメール アドレスを取得するには、Graph APIを使用して、ソーシャル フレームワークを使用して現在のユーザーをクエリする必要があります。

SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                     requestMethod:SLRequestMethodGET
                                               URL:[NSURL URLWithString:@"https://graph.facebook.com/me"]
                                        parameters:nil];
request.account = _account; // This is the _account from your code
[request performRequestWithHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    if (error == nil && ((NSHTTPURLResponse *)response).statusCode == 200) {
        NSError *deserializationError;
        NSDictionary *userData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&deserializationError];

        if (userData != nil && deserializationError == nil) {
            NSString *email = userData[@"email"];
            NSLog(@"%@", email);
        }
    }
}];
于 2013-10-31T22:49:13.957 に答える
0

ここで、GET リクエストで param を渡す必要があります。デフォルトでは ID と名前のみ。

NSDictionary *param = @{@"fields":@"email,name"};

SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                     requestMethod:SLRequestMethodGET
                                                               URL:[NSURL URLWithString:@"https://graph.facebook.com/me"]
                                                        parameters:param];
于 2015-11-18T07:36:56.830 に答える