[英]I am not able to fetch user data from Facebook in iOS
I am new to iPhone programming.Using below code i am login into Facebook and fetching data.But here problem is if click on the Loginwithfacebook button Facebook dialog box opening.there i am enter username and password of Facebook after that if again click on same button then i am getting user data.But i don't want to click on double time.And also once i login in Facebook.inside the app where i want to fetch user data at that time i don't to login one more time until i click on logout.Please give me best idea. 我是iPhone编程的新手,使用下面的代码登录Facebook并获取数据。但是这里的问题是,如果单击打开的Loginwithfacebook按钮Facebook对话框,请输入Facebook的用户名和密码,然后再次单击按钮,那么我正在获取用户数据。但是,我不想单击两次时间。也有一次,我登录Facebook。在应用程序内部,我当时想获取用户数据,我不想再登录一次直到我单击注销。请给我最好的主意。
-(void)LoginWithFacebookk:(id)sender
{
if (!FBSession.activeSession.isOpen) {
FBSession *session = [[FBSession alloc] init];
// Set the active session
[FBSession setActiveSession:session];
// Open the session
[session openWithBehavior:FBSessionLoginBehaviorForcingWebView
completionHandler:^(FBSession *session,
FBSessionState status,
NSError *error)
{
}];
}
else
{
NSLog(@"open response");
FBRequest* friendsRequest = [FBRequest requestForMe];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,NSDictionary <FBGraphUser> *user,NSError *error) {
NSString *emailiddd=[NSString stringWithFormat:@"%@",[user objectForKey:@"email"]];
NSLog(@"%@",emailiddd);
NSString *post = [NSString stringWithFormat:@"email=%@",emailiddd];
NSLog(@"%@",post);
}];
}
}
}
if you are checking sample code of provide by Facebook in FacebookSDK
there is one sample SessionLoginSample please check how did work:- 如果你正在检查由Facebook在提供的示例代码
FacebookSDK
有一个样品SessionLoginSample请检查是怎么做的工作: -
You have to configur you app like this:- 您必须像这样配置您的应用程序:-
in Native iOS app you have to set you app Bundle Id that you are using in to you Project for example( com.compame.projecname ) 在本机iOS应用程序中,您必须将您要用于项目的应用程序捆绑ID设置为例如( com.compame.projecname )
For implement in to your Project Here i put the explain. 为了实施到您的项目中,我在这里进行了说明。
in .h file create One Button with IBOutlet
and connect this button in to xib as we did normally 在.h文件中,使用
IBOutlet
创建一个按钮,然后像往常一样将此按钮连接到xib
#import <FacebookSDK/FacebookSDK.h>
@interface LoginViewController : UIViewController<FBLoginViewDelegate>
{
IBOutlet UIButton *FB_login; // just connect IBoutlate no need to give IBAction
FBLoginView *loginview;
}
@property (strong, nonatomic) id<FBGraphUser> loggedInUser;
@property (strong, nonatomic) IBOutlet FBProfilePictureView *profilePic; //this is for show profile pic or logged in user
in .m File @implementation LoginViewController @synthesize profilePic = _profilePic; 在.m文件中 @implementation LoginViewController @synthesize profilePic = _profilePic;
- (void)viewDidLoad
{
loginview = [[FBLoginView alloc] init];
loginview =
[[FBLoginView alloc] initWithPublishPermissions:[NSArray arrayWithObjects:@"publish_actions",@"email",nil] defaultAudience:FBSessionDefaultAudienceFriends];
loginview.frame =FB_login.frame;//CGRectMake(90,149, 280, 55);
for (id obj in loginview.subviews)
{
if ([obj isKindOfClass:[UIButton class]])
{
UIButton * loginButton = obj;
UIImage *loginImage = [UIImage imageNamed:@"btn_fb_login.png"];
[loginButton setBackgroundImage:loginImage forState:UIControlStateNormal];
[loginButton setBackgroundImage:nil forState:UIControlStateSelected];
[loginButton setBackgroundImage:nil forState:UIControlStateHighlighted];
[loginButton sizeToFit];
}
if ([obj isKindOfClass:[UILabel class]])
{
UILabel * loginLabel = obj;
loginLabel.text =@""; //@"Log in to facebook";
loginLabel.textAlignment = NSTextAlignmentCenter;
loginLabel.frame =CGRectMake(123,149, 280, 55);// CGRectMake(0, 0, 271, 37);
}
}
loginview.delegate = self;
[self.view addSubview:loginview];
[super viewDidLoad];
}
-(void)LogOut:(NSNotification *)notif
{
[self loginViewShowingLoggedOutUser:loginview];
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *each in cookieStorage.cookies) {
// put a check here to clear cookie url which starts with twitter and then delete it
[cookieStorage deleteCookie:each];
}
}
#pragma mark------ FaceBook Sign In method------------
- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView {
NSLog(@"Logged In");
}
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
user:(id<FBGraphUser>)user {
NSLog(@"%@",user);
self.profilePic.profileID = user.id;
}
- (void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView {
// Called after logout
NSLog(@"Logged out");
self.profilePic.profileID = nil;
[FBSession.activeSession closeAndClearTokenInformation];
}
- (void)loginView:(FBLoginView *)loginView handleError:(NSError *)error {
// see https://developers.facebook.com/docs/reference/api/errors/ for general guidance on error handling for Facebook API
// our policy here is to let the login view handle errors, but to log the results
NSLog(@"FBLoginView encountered an error=%@", error);
}
NOTE:- If you are trying to set Image of logged in user using FBProfilePictureView
do not forget add [FBProfilePictureView class];
注:-如果您尝试使用
FBProfilePictureView
设置登录用户的图像,请不要忘记添加[FBProfilePictureView class];
in to app Delegate like Bellow 进入应用程序委托像贝娄
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[FBProfilePictureView class];
// Override point for customization after application launch.
return YES;
}
Here it is a sample code for you Sample code Facebook log-in with Image 这是为您提供的 示例代码示例代码使用Image登录Facebook
If you are willing to, you can also do it with Parse : 如果愿意,也可以使用Parse来做到这一点:
- (IBAction)facebookRegistrationButtonPressed {
// The permissions requested from the user
NSArray *permissionsArray = @[@"email", @"user_about_me", @"publish_actions", @"status_update", @"manage_pages", @"publish_stream"];
// Login PFUser using Facebook
[PFFacebookUtils logInWithPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
if (!user) {
if (!error) {
NSLog(@"Uh oh. The user cancelled the Facebook login.");
} else {
NSLog(@"Uh oh. An error occurred: %@", error);
}
} else if (user.isNew) {
NSLog(@"User with facebook signed up and logged in!");
[self processFacebookRequest];
} else {
NSLog(@"User with facebook logged in!");
[self processFacebookRequest];
}
}];
}
- (void)processFacebookRequest {
FBRequest *request = [FBRequest requestForMe];
// Send request to Facebook
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (!error) {
// result is a dictionary with the user's Facebook data
NSDictionary *userData = (NSDictionary *)result;
NSString * email = [result objectForKey:@"email"];
NSString *facebookID = userData[@"id"];
NSLog(@"facebookID = %@", facebookID);
} else {
NSLog(@"error : %@", error.localizedDescription);
}
}];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.