我有一个非常简单的问题。
在 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", [错误代码]);
}
@结尾