2

我有一个非常简单的问题。

在 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", [错误代码]);
    }

@结尾
4

1 回答 1

2

以与 FB 教程显示的完全相同的方式进行操作,只需将登录代码移动到按钮事件或您想要触发它的任何内容中。

于 2012-06-26T14:02:23.587 回答