7

メールを含む一部のユーザーの情報にアクセスしようとしています。この目的のために、私はGraphAPIを使用してこのメ​​ソッドを呼び出します。

[facebook requestWithGraphPath:@"me" andDelegate:self];

電子メール情報なしでユーザー情報を返します(誕生日もありません)。私はすべての権限を設定し、複数のアカウント(公開情報として電子メールと誕生日を持っている)でテストし、ダイアログのすべての要求を受け入れました。

これが私の初期化です:

if(!facebook) {
    facebook = [[Facebook alloc] initWithAppId:[self _APP_KEY] andDelegate:self];
    NSArray *array =  [NSArray arrayWithObjects: @"email", @"user_birthday", @"publish_stream", @"offline_access", nil];
    [self setPermissions:array];
}

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}

if (![facebook isSessionValid]) {
    [facebook authorize:permissions];
} 
else {
    [self getUserInfo];
}

ログインコールバック:

- (void)fbDidLogin {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

    [self getUserInfo];
}

getUserInfoメソッド:

- (void) getUserInfo {
    [facebook requestWithGraphPath:@"me" andDelegate:self];
}

リクエストコールバック:

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

    if ([result isKindOfClass:[NSDictionary class]]) {
        NSDictionary* json = result;
        NSLog(@"-> %@", json);
    }
}

結果は次のとおりです。

-> {
    "first_name" = EDITED (my name);
    gender = male;
    hometown =     {
        id = 111072692249998;
        name = "Porto Alegre";
    };
    id = 653099452;
    languages =     (
                {
            id = 104034306299811;
            name = "Brazilian Portuguese";
        },
                {
            id = 106059522759137;
            name = English;
        }
    );
    "last_name" = EDITED (my last name);
    link = EDITED (my profile);
    locale = "en_US";
    location =     {
        id = 112047398814697;
        name = "S\U00e3o Paulo, Brazil";
    };
    name = EDITED (my name);
    timezone = "-3";
    "updated_time" = "2012-04-25T13:36:51+0000";
    verified = 1;
}

ご覧のとおり、ユーザーの電子メールに関する情報はありません。私はいくつかのステップを逃していますか?アイデアはありますか?

前もって感謝します

4

7 に答える 7

7

これを使ってみてください、私の場合はうまくいきます

facebook = [[Facebook alloc] initWithAppId:[self _APP_KEY] andDelegate:self]; [facebook authorize:[NSArray arrayWithObjects:@ "email"、nil]];

于 2012-04-25T17:13:03.807 に答える
3

この 権限を試してください=[[NSArrayalloc] initWithObjects:@ "offline_access"、@ "email"、nil];

于 2012-10-05T05:13:04.500 に答える
1

このようなユーザーの電子メールを取得できます..fbDidloginが起動された後、このメソッドを呼び出します

- (void)fetchUserDetails {
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"SELECT uid, name, pic, email FROM user WHERE uid=me()", @"query",nil];

    [fb requestWithMethodName:@"fql.query"
                                     andParams:params
                                 andHttpMethod:@"POST"
                                   andDelegate:self];
}

そして、request:(FBRequest *)request didLoadあなたはこのようなことをするでしょう:

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

  if([request.url rangeOfString:@"fql.query"].location !=NSNotFound)
    {
        if ([result isKindOfClass:[NSArray class]] && [result count]>0) {
            result = [result objectAtIndex:0];
        }

        if ([result objectForKey:@"email"]) {

            NSLog(@"%@",[result objectForKey:@"email"]);
           }
      }
}

楽しみ :)

于 2012-04-25T15:07:20.643 に答える
1

1)メールや情報などを取得する許可を与えます...

// You must ALWAYS ask for public_profile permissions when opening a session
                [FBSession openActiveSessionWithReadPermissions:@[@"public_profile",@"user_videos",@"email"]
                                                   allowLoginUI:YES
                                              completionHandler:
                 ^(FBSession *session, FBSessionState state, NSError *error)
                 {
                     // Retrieve the app delegate
                     AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
                     // Call the app delegate's sessionStateChanged:state:error method to handle session state changes
                     [appDelegate sessionStateChanged:session state:state error:error];
                 }];

2)あなたが望む場所にEメールを取得するには...

if (FBSession.activeSession.isOpen)
    {
        [[FBRequest requestForMe] startWithCompletionHandler:
         ^(FBRequestConnection *connection,
           NSDictionary<FBGraphUser> *user,
           NSError *error)
        {
             if (!error)
             {
                 NSString *userEmail = [user objectForKey:@"email"];
             }
            [tblSettingVw reloadData];
         }];
    }

注:ユーザー辞書は次のように返されます

{
    "first_name" =;
    gender =;
    id =;
    "last_name" =;
    link = "";
    locale = "";
    name = "";
    timezone = "";
    "updated_time" = "";
    verified = ;
}
于 2014-12-05T13:52:59.413 に答える
1

電子メールの代わりに電話番号で確認されたすべてのFacebookアカウントNULL[user objectForKey:@"email"]

于 2015-02-06T19:34:14.713 に答える
0

ユーザーの電子メールにアクセスできるのは、ユーザーの承認を得た場合のみです。

公開グラフはこの情報を提供しません。

あなたはこれを読むべきです:https ://developers.facebook.com/docs/guides/web/#login

于 2012-04-25T14:38:27.817 に答える
0

この情報については、次の方法でユーザーに許可を求める必要があります。

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
NSArray *permissions = [[NSArray alloc] initWithObjects:
                        @"user_birthday",
                        nil];
return [FBSession openActiveSessionWithPermissions:permissions
                                      allowLoginUI:allowLoginUI
                                 completionHandler:^(FBSession *session,
                                                     FBSessionState state,
                                                     NSError *error) {
                                     [self sessionStateChanged:session
                                                         state:state
                                                         error:error];
                                 }];

}

必要な情報はすべてここにあります。このチュートリアルに従ってください。

まず、これ:Facebookログイン

そして、これは:ユーザーデータを取得する

于 2012-09-10T14:26:46.800 に答える