2012-03-02 3 views
11

페이스 북의 iOS SDK를 사용하기 위해 "모범 사례"지침이 무엇인지 궁금합니다.iOS Facebook SDK - 모범 사례?

구체적으로 - Facebook SDK를 사용하는 여러 가지 양식이 있습니다. OOP 프로그래머로서의 초기 본능은 모든 Facebook 활동을 처리하는 내 데이터 액세스 레이어 아래에 "FacebookManager"클래스를 만드는 것이 었습니다. 불행하게도 Facebook iOS SDK가 대리자 및 비동기 메서드를 사용하기 때문에 FacebookManager를 사용하는 다른 모듈이 모든 응답을 위해 대리자를 전달해야하므로 유용하지 않습니다.

그런 다음 각 ViewController는 FBRequestDelegate가되어 모든 Facebook 응답을 처리 할 것이라고 생각했습니다.

그럼 앱에서 어떻게합니까?

답변

5

필자가 제안한대로 FacebookManager를 만드는 것입니다. 이 관리자는 FBRequestDelegate가됩니다. 이제 위임 모델의 블록을 선호하므로 모든 FacebookManager 메소드가 블록 기반입니다. 여기

은 사용자의 벽 방법에 내 게시물 난 그냥

- (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]; 
} 

내가 다룰 수있는 더 좋은 방법이 있었다하고자하는 블록을 실행 성공 또는 오류에 그런

- (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"]; 
    } 

} 

모습입니다 블록과 함께하지만 그것은 지금까지 찾은 최고의 하나입니다. 이것을하는 것이 최선의 방법입니까? 아마 그게 아니지만 그게 내가 현재 사용하고 괜찮아 보이는 것, 내 FB에서 모든 FB 상호 작용을 멀리 유지.

주 모든 코드가 여기

+0

왜 PostToWall 함수의 2 마지막 줄은 환입하지 아니? 요청을 실행 한 다음 블록을 매개 변수로 추가합니다. 나는 그것을 얻지 못한다 ... –

+0

나의 이해는 요청이 준비되고 다음에 runloop이 실행될 때까지 실행되지 않는다는 것이다. 그렇기 때문에 블록을 추가하기 전에 요청을 수행해야합니다. 그러나 실제로는 블록을 추가 한 후 실행 루프의 다음 실행시에 실행됩니다. – ribeto

+0

예제를 사용하여 끝 냈습니다. 감사. –

0

페이스 북의 관리자 아무런 자료가없는 이유 ARC 가정, 페이스 북 SDK를 통해 기본적으로 래퍼 길을 가야하는 것입니다. 관리 방법에 대한 몇 가지 팁이 있습니다.

1) Facebook SDK의 프로토콜 정의를 수정하고 필요하지 않은 것을 선택 사항으로 만들어 구현할 필요가 없습니다.

2)이 관리자 클래스의 모든 세션 활동, 로그인/로그 아웃, 위임자, 프로토콜 등을 처리하십시오. 즉,이 관리자는 Facebook sdk에서 정의한 모든 프로토콜을 구현합니다.

3) 관리자 클래스에서 고유 한 프로토콜을 정의하고 모든 프로토콜 메소드를 선택적으로 설정하여 모든 뷰 컨트롤러가 실제로 필요한 것을 정의 할 수 있도록하십시오.

4) 일부 도움이 래퍼처럼, 유용 할 것이다,

- (void) postToFriend: (Record*) f_record withMessage: (NSString*) message; 
- (void) resumeSession; // checks, resumes session, extend token, or report error 

5) 당신이 당신의 viewControllers

오픈 소스 코드의 많은이에 대한 더 많은 기능을 필요로하는 경우 래퍼를 쉽게 추가 할 것 사용 가능 (github 검색)하지만 사용자 정의 관리자 클래스는 작성하기 어렵지 않고 다른 프로젝트로 쉽게 이식 할 수 있습니다.

희망이 있습니다.

0

우리는 페이스 북 통합을 위해 사용할 수있는 꽤 광범위한 라이브러리를 만들었습니다.여기를 참조하십시오 :

https://github.com/RIKSOF/three20/tree/development/src/extThree20Facebook

그것의 Three20 프레임 워크 확장을. 원하는 경우이 라이브러리를 Three20과 독립적으로 쉽게 수정할 수 있습니다.

우리는 기본적으로 각각의 그래프 API 객체의 객체를 정의했습니다. Graph API에서 반환 된 JSON은 이러한 개체에 읽혀집니다.