facebook提供了一个及其简单的登录方式:Login Button(以下简称fbButton):
这里就说一下如何使用fbButton:
1.先将facebook的sdk引入你的工程(可以去官网下载,然后拖拽或者使用Cocoapods引入)
2.去facebook创建你的app(https://developers.facebook.com/apps,官网有视频说明如何申请:http://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/3.1/)
3.创建好之后点击如下图所示按钮
点击Native iOS App这一栏,如图所示:
Bundle ID必须与你工程中.plist文件的Bundle identifier名称一样,App Store ID就是你app的itunes ID,记得下面勾选enabled。最后一个输入框可以不填写。
5.然后我们回到我们工程的.plist文件。添加下图所示信息
那串数字是你在facebook注册app时给你的id。
这样,准备工作就做好了。
然后添加一些代码:
首先,在appDelegate中,添加下面的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//...
[FBLoginView class];
return YES;
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
// Call FBAppCall's handleOpenURL:sourceApplication to handle Facebook app responses
BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
// You can add your app-specific url handling code here if needed
return wasHandled;
}
然后,在你需要添加fbButton的类中添加下面的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Create a FBLoginView to log the user in with basic, email and likes permissions
// You should ALWAYS ask for basic permissions (basic_info) when logging the user in
//[FBSettings setDefaultAppID:@"450051905053297"];
FBLoginView *loginView = [[FBLoginView alloc] initWithReadPermissions:@[@"basic_info", @"email", @"user_likes"]];
// Set this loginUIViewController to be the loginView button's delegate
loginView.delegate = self;
// Align the button in the center horizontally
loginView.frame = CGRectOffset(loginView.frame,
(self.view.center.x - (loginView.frame.size.width / 2)),
5);
// Align the button in the center vertically
loginView.center = self.view.center;
// Add the button to the view
[self.view addSubview:loginView];
}
// This method will be called when the user information has been fetched
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
user:(id<FBGraphUser>)user {
self.profilePictureView.profileID = user.id;
self.nameLabel.text = user.name;
}
// Implement the loginViewShowingLoggedInUser: delegate method to modify your app's UI for a logged-in user experience
- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView {
self.statusLabel.text = @"You're logged in as";
}
// Implement the loginViewShowingLoggedOutUser: delegate method to modify your app's UI for a logged-out user experience
- (void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView {
self.profilePictureView.profileID = nil;
self.nameLabel.text = @"";
self.statusLabel.text= @"You're not logged in!";
}
// You need to override loginView:handleError in order to handle possible errors that can occur during login
- (void)loginView:(FBLoginView *)loginView handleError:(NSError *)error {
NSString *alertMessage, *alertTitle;
// If the user should perform an action outside of you app to recover,
// the SDK will provide a message for the user, you just need to surface it.
// This conveniently handles cases like Facebook password change or unverified Facebook accounts.
if ([FBErrorUtility shouldNotifyUserForError:error]) {
alertTitle = @"Facebook error";
alertMessage = [FBErrorUtility userMessageForError:error];
// This code will handle session closures since that happen outside of the app.
// You can take a look at our error handling guide to know more about it
// https://developers.facebook.com/docs/ios/errors
} else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryAuthenticationReopenSession) {
alertTitle = @"Session Error";
alertMessage = @"Your current session is no longer valid. Please log in again.";
// If the user has cancelled a login, we will do nothing.
// You can also choose to show the user a message if cancelling login will result in
// the user not being able to complete a task they had initiated in your app
// (like accessing FB-stored information or posting to Facebook)
} else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryUserCancelled) {
NSLog(@"user cancelled login");
// For simplicity, this sample handles other errors with a generic message
// You can checkout our error handling guide for more detailed information
// https://developers.facebook.com/docs/ios/errors
} else {
alertTitle = @"Something went wrong";
alertMessage = @"Please try again later.";
NSLog(@"Unexpected error:%@", error);
}
if (alertMessage) {
[[[UIAlertView alloc] initWithTitle:alertTitle
message:alertMessage
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil] show];
}
}
好了,完工