iOS Facebook SDK - 最佳实践?

Roe*_*man 11 facebook objective-c ios

我想知道使用Facebook iOS SDK的"最佳实践"指南是什么.

具体来说 - 我有几种使用Facebook SDK的表单.我作为OOP程序员的初衷是在我的数据访问层下创建一个"FacebookManager"类来处理所有Facebook活动.不幸的是,因为Facebook iOS SDK使用委托和异步方法,所以这不是那么有用,因为使用FacebookManager的任何其他模块都必须传递所有响应的委托.

然后我想到每个ViewController本身都是FBRequestDelegate并处理所有Facebook响应.

那么,你如何在你的应用程序中做到这一点?

rib*_*eto 5

我所做的就是按照你的建议创建一个FacebookManager.该经理成为FBRequestDelegate.现在我更喜欢块到委托模型,所以我所有的FacebookManager方法都是基于块的.

这是我对用户的墙方法的帖子的样子

- (void)postToUserWall:(NSDictionary*)postDictionary withCompleteHandler:(void(^)(id result, NSError* error))block {


  if( [facebook_ isSessionValid] ) {
    NSMutableDictionary* params = [postDictionary mutableCopy];
    [params setObject:facebook_.accessToken forKey:@"access_token"];
    FBRequest* request = [facebook_ requestWithGraphPath:@"me/feed" andParams:[postDictionary mutableCopy] andHttpMethod:@"POST" andDelegate:self];
    [[request params] setObject:block forKey:@"result"];
  }

}
Run Code Online (Sandbox Code Playgroud)

然后在成功或错误时我只执行块

- (void)processRequest:(FBRequest*)request withResult:(id)result andError:(NSError*)error {
  NSDictionary* params = [request params];
  if( [request params] != nil && [params objectForKey:@"result"] != nil ) {
    void(^completeBlock)(id result,NSError* error) = [params objectForKey:@"result"];
    completeBlock(result, nil);
  }
}


- (void)request:(FBRequest *)request didLoad:(id)result {
  [self processRequest:request withResult:result andError:nil];
}


- (void)request:(FBRequest *)request didFailWithError:(NSError *)error {
  [self processRequest:request withResult:nil andError:error];
}
Run Code Online (Sandbox Code Playgroud)

我希望有一个更好的方法来处理阻止,但这是迄今为止我发现的最好的方法.这是最好的方法吗?可能不是,但这是我目前使用的,似乎没问题,保持所有FB交互远离我的视图控制器.

请注意,此处的所有代码都假设ARC,这就是没有版本的原因