我有一个非常简单的问题。
在 FB 教程https://developers.facebook.com/docs/mobile/ios/build/中,它开始在内部登录didFinishLaunchingWithOptions
——在应用程序启动后。
我需要点击登录,然后等待callback
并在 FB 墙上发送消息。我认为 Hackbook 应用程序示例设计应用程序对于这个目的来说太复杂了。
实现这一目标的最简单方法是什么?
UPD:我遵循了 Hackbook 示例,但ViewControllers
仍然没有得到callback
:(
yAppDelegate.h:
#进口 #import "FBConnect.h" @interface yAppDelegate : UIResponder { 脸书 *脸书; } @property (strong, nonatomic) UIWindow *window; @property(非原子,保留)Facebook *facebook; @结尾
yAppDelegate.m:
#import "yAppDelegate.h" #import "yViewController.h" 静态 NSString* kAppId = @"350435425024264"; @implementation yAppDelegate @synthesize 窗口 = _window; @synthesize 脸书; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { yViewController *viewController = [[yViewController alloc] init]; facebook = [[Facebook alloc] initWithAppId:kAppId andDelegate:viewController]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) { facebook.accessToken = [默认 objectForKey:@"FBAccessTokenKey"]; facebook.expirationDate = [默认 objectForKey:@"FBExpirationDateKey"]; } 返回是; } - (void)applicationDidBecomeActive:(UIApplication *)application { [[self facebook]extendAccessTokenIfNeeded]; } - (BOOL)应用程序:(UIApplication *)应用程序句柄OpenURL:(NSURL *)url { 返回 [self.facebook handleOpenURL:url]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication 注解:(id)annotation { 返回 [self.facebook handleOpenURL:url]; }
yViewController.h:
#进口 #import "FBConnect.h" @interface yViewController : UIViewController { NSArray *权限; } @property (nonatomic, 保留) NSArray *permissions; @结尾
yViewController.m
#import "yViewController.h" #import "yAppDelegate.h" #import "FBConnect.h" @interface yViewController () @结尾 @implementation yViewController @synthesize 权限; - (IBAction)buttonPressed:(UIButton *)sender { NSLog(@"按下按钮!"); 权限 = [[NSArray alloc] initWithObjects:@"offline_access", nil]; yAppDelegate *delegate = (yAppDelegate *)[UIApplication sharedApplication].delegate; if (![[delegate facebook] isSessionValid]) { [[代表 facebook] 授权:权限]; } 别的 { //[self showLoggedIn]; } NSLog(@"登录!!"); } - (void)viewDidLoad { [超级视图DidLoad]; // 在加载视图后做任何额外的设置,通常是从一个 nib。 } - (void)viewDidUnload { [超级 viewDidUnload]; // 释放主视图的所有保留子视图。 } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 返回(接口方向!= UIInterfaceOrientationPortraitUpsideDown); } #pragma mark - FBSessionDelegate 方法 /** * 当用户登录成功时调用。 */ - (void)fbDidLogin { NSLog(@"登录了"); } -(void)fbDidExtendToken:(NSString *)accessToken expiresAt:(NSDate *)expiresAt { NSLog(@"令牌扩展"); } /** * 当用户取消授权对话框时调用。 */ -(void)fbDidNotLogin:(BOOL) 取消 { NSLog(@"fbDidNotLogin"); } /** * 请求注销成功时调用。 */ - (void)fbDidLogout { NSLog(@"fbDidLogout"); // 删除保存的授权信息,如果存在并且是 // 可以清除它(注销、会话无效、应用未经授权) NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [默认 removeObjectForKey:@"FBAccessTokenKey"]; [默认 removeObjectForKey:@"FBExpirationDateKey"]; [默认同步]; } /** * 会话过期时调用。 */ -(无效)fbSessionInvalidated { NSLog(@"fbSessionInvalidated"); [自我 fbDidLogout]; } #pragma mark - FBRequestDelegate 方法 /** * 当 Facebook API 请求返回响应时调用。 * * 此回调使您可以访问原始响应。之前叫过 * (void)request:(FBRequest *)request didLoad:(id)result, * 传递解析的响应对象。 */ - (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response { //NSLog(@"收到响应"); } /** * 当请求返回并且其响应已被解析为时调用 * 一个东西。 * * 结果对象可能是字典、数组或字符串,具体取决于 * 关于 API 响应的格式。如果您需要访问原始响应, * 采用: * * (void)request:(FBRequest *)request * didReceiveResponse:(NSURLResponse *)response */ - (void)request:(FBRequest *)request didLoad:(id)result { NSLog(@"-(void)request"); } /** * 当错误阻止 Facebook API 请求完成时调用 * 成功地。 */ - (void)request:(FBRequest *)request didFailWithError:(NSError *)error { NSLog(@"Err message: %@", [[error userInfo] objectForKey:@"error_msg"]); NSLog(@"错误代码: %d", [错误代码]); } @结尾