Ios*_*per 1 iphone facebook-graph-api ios facebook-sdk-3.0
我是iPhone编程的新手.使用下面的代码我登录到Facebook并获取数据.但是这里的问题是如果点击Loginwithfacebook按钮Facebook对话框打开.我在那之后输入Facebook的用户名和密码如果再次点击相同按钮然后我得到用户数据.但我不想点击双倍的时间.也有一次我登录Facebook.inside应用程序,我想在那时获取用户数据我不再登录直到我点击退出.请给我最好的主意.
-(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);
}];
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您正在检查Facebook提供的示例代码,FacebookSDK那么有一个示例SessionLoginSample请检查工作原理: -
你必须像这样配置你的应用程序: -

在原生iOS应用程序中,您必须设置您正在使用的应用程序包ID项目例如(com.compame.projecname)
为实现你的项目在这里我把解释.
在.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
Run Code Online (Sandbox Code Playgroud)
在.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);
}
Run Code Online (Sandbox Code Playgroud)
注意: -
如果您尝试使用登录用户设置图像,FBProfilePictureView请不要忘记添加[FBProfilePictureView class];到应用程序代理,如Bellow
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[FBProfilePictureView class];
// Override point for customization after application launch.
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这里是一个示例代码 示例代码Facebook使用Image登录
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |