0

webview ios appFacebookのメールを使用するを構築しています。私は自分の問題をグーグルで検索しましたが、それらの答えはすべてこの関数からのものです:

   NSArray *permissions = [NSArray arrayWithObjects:@"email", nil];
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
                                             [self sessionStateChanged:session state:state error:error];
                                         }];

しかし、私はこれからではなく、Facebookのメールアドレスが欲しい. それを行う方法はありますか?

この機能を使用すると、2 回ログインする必要があり、面倒です。これ以外にメールアドレスを取得する方法がない場合、login二度手間を省く方法はありますか?

4

2 に答える 2

0

そのために使用できます+requestForMe

-(void)getUserEmail
{
    [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary <FBGraphUser> *user, NSError *error){
            if (!error) {
                NSString *email = [user objectForKey:@"email"];
                NSLog(@"email : %@", email);
            }
        }];
}
于 2013-03-21T10:55:26.793 に答える
0

はい、Facebook アカウントに組み込まれている iOS 6 を使用して (実際には FB SDK を使用しなくても) メールを取得できます。ユーザーがすでに iOS 設定で Facebook にログインしている場合、初回のみ、FB アカウントへのアプリ アクセスを許可するよう求められます。

最初に、これをインターフェースに追加します。

#import <Social/Social.h>
#import <Accounts/Accounts.h>

@property (nonatomic, strong) ACAccountStore *accountStore;
@property (nonatomic, strong) ACAccount *facebookAccount;

次に、これを実装に使用します。

- (void)getFacebookPermissions
{
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        // we have facebook account in ios settings
        NSLog(@"Facebook account exists");

        ACAccountType *facebookTypeAccount = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

        [self.accountStore requestAccessToAccountsWithType:facebookTypeAccount
                                                   options:@{ACFacebookAppIdKey: *YOUR_FACEBOOK_APP_ID_HERE!*, ACFacebookPermissionsKey: @[@"email"]}
                                                completion:^(BOOL granted, NSError *error) {
                                                    if (granted) {
                                                        self.facebookAccount = [[self.accountStore accountsWithAccountType:facebookTypeAccount] lastObject];

                                                        NSURL *meURL = [NSURL URLWithString:@"https://graph.facebook.com/me"];

                                                        SLRequest *meRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                                                                  requestMethod:SLRequestMethodGET
                                                                                                            URL:meURL
                                                                                                     parameters:nil];

                                                        meRequest.account = self.facebookAccount;

                                                        [meRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                                                            if (error) {
                                                                NSLog(@"[ERROR] %@", [error localizedDescription]);
                                                                // or do some error handling
                                                            } else {
                                                                NSError *jsonError;
                                                                NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:responseData
                                                                                                                             options:NSJSONReadingAllowFragments
                                                                                                                               error:&jsonError];
                                                                if (jsonError)
                                                                {
                                                                    NSLog(@"[FB PARSING ERROR] %@", [error localizedDescription]);
                                                                } else {
                                                                    // here it is!
                                                                    NSString *email = [responseJSON objectForKey:@"email"];
                                                                }
                                                            }

                                                        }];


                                                    } else {
                                                        if (error) {
                                                            NSLog(@"[ERROR] %@", [error localizedDescription]);

                                                        }
                                                        else
                                                        {
                                                            NSLog(@"Access to Facebook was not granted. Please go to the device settings and allow access for *YOUR_APP_NAME*");
                                                        }
                                                    }
                                                }];
    } else {
        NSLog(@"There was an error retrieving your Facebook account, make sure you have an account setup in Settings and that access is granted for *YOUR_APP_NAME*");
    }

}

AccountStore のインスタンスを作成し、ソーシャル フレームワークとアカウント フレームワークを弱いリンクにすることを忘れないでください。

PS Facebook アプリの設定は次のとおりです (上部にアプリ ID が表示されます)。 ここに画像の説明を入力

お役に立てれば!

于 2013-03-21T09:49:58.050 に答える