是的,您可以使用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薄弱环节社会和账务和实例构架。
P.S.这里是你的Facebook应用程序的设置(你可以看到你的应用程序ID在顶部):
希望这有助于!
谢谢。这看起来像我想要的,但我无法得到这项工作。看起来,如果(授予)返回false,所以它会变成其他的。然而,我没有得到“有一个错误检索...”日志要么..为什么这将是? – 2013-03-25 07:12:44
@SeungHyunSeanLee,我有同样的错误。要修复它,你应该再次检查你的Facebook应用程序的设置。他们应该像上面的图片一样(确保您的包ID(com.yourcompany.yourapp)是正确的,并且您已启用“Facebook登录”)。还要确保你的self.accountStore被实例化,而不是零! 它适用于我,所以如果您还有其他几个问题 - 我很乐意为您提供帮助。 P.S.如果用户未在iOS设置中登录Facebook或登录,但不允许您的应用在第一次启动时使用FB帐户,则会显示“检索到错误...”。 – 2013-03-25 08:17:26