2012-10-02 34 views
5

Chúng tôi muốn nâng cấp lên 3.x để người dùng của chúng tôi trên iOS 6/iPhone 5 sẽ có trải nghiệm FB hợp lý nhất có thể ... một FB viết lại tích hợp, hoặc là nó có thể cho tôi để sử dụng các tiêu đề khấu hao và tiếp tục sử dụng các API 2.x với SDK 3.1?Sự cố khi di chuyển từ Facebook iOS SDK 2.x thành 3.x

Một số trong những phương pháp quan trọng và yêu cầu chúng tôi đang dựa vào là: [ad.facebook ủy quyền: perms], shouldExtendAccessToken, extendAccessTokenIfNeeded, isSessionValid, thoại: @ "thức ăn" andParams: params andDelegate: đại biểu, "https : //graph.facebook.com/me? fields = id, email, first_name & access_token = ", et.al. Một số tìm kiếm trong các dự án mẫu 3,1 làm cho nó trông giống như tất cả các dự án này đã được thay thế - và tôi sẽ tưởng tượng nó không chỉ là thay đổi tên.

Tôi chưa tìm thấy phiên bản 2.x đến 3.x của số này Upgrading from 3.0 to 3.1 - nếu tôi đã bỏ qua điều đó, vui lòng thông báo. Khi trước đây cố gắng nâng cấp lên 3.0 gần đây, tôi đã gặp phải các lỗi đáng kể (tiêu đề SBJson trùng lặp, không giải quyết tiêu đề FB) khi cố gắng sử dụng API bị khấu hao và sau khi biên dịch, handleOpenURL dường như bị hỏng và sẽ chuyển đổi lại cho FB lần thứ 2, sau đó gặp sự cố. Và tôi đã xem qua các bài đăng chỉ ra rằng có thể có vấn đề với việc vô hiệu hoá ARC của 3.x (chúng ta không thể sử dụng nó như chúng ta có C++).

Tôi chưa bắt đầu từ 2.x đến 3.1. Có lẽ điều đó sẽ trở nên mượt mà hơn, nhưng tôi muốn đạt được một số thông tin chi tiết từ những người đã đi trước tôi trước khi một dơi dài thứ 2 - cảm ơn rất nhiều.

Trả lời

9

Tôi vừa mới nâng cấp này cho ứng dụng của mình. Lý do của tôi để làm cho nó là dòng chảy mượt mà hơn cho iOS 6 và hỗ trợ trong tương lai cho facebook vì họ sẽ cuối cùng không dùng nữa sdk cũ. Những thay đổi lớn là luồng đăng nhập và mở các cuộc gọi đồ thị. Hộp thoại gọi để đăng trên tường của bạn vẫn heo con trở lại các tiêu đề không dùng nữa. Đối với những phương pháp bạn đang quan tâm đến việc họ sẽ được thay thế như sau:

[ad.facebook ủy quyền: perms]

FBSession *session = [[FBSession alloc] initWithAppID:appId 
           permissions:permissionsArray 
          urlSchemeSuffix:urlSuffix 
         tokenCacheStrategy:nil]; 

[FBSession setActiveSession:session]; 
if(allowLoginUI == YES) 
{ 
    [session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:handler]; 
} 
else if(session.state == FBSessionStateCreatedTokenLoaded) 
{ 
    [session openWithCompletionHandler:^(FBSession *_session, FBSessionState status, NSError *error) { 
     [self _sessionStateChanged:_session state:status error:error];    
    }]; 
} 
[session release]; 

thấy để được hướng dẫn thực hiện bổ sung về đăng nhập
https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/
https://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/

shouldExtendAccessToken, extendAccessTokenIfNeeded, - những thứ này đã biến mất và SDK SDK thực hiện ments bộ nhớ đệm và mở rộng các mã thông báo nếu cần thiết. Nếu bạn nhìn thấy trong đoạn mã đầu tiên của tôi nếu loginUI không phải là để hiển thị, nhưng trạng thái phiên là trong FBSessionStateCreatedTokenLoaded, bạn vẫn muốn mở phiên. Khi phiên của bạn ở trạng thái FBSessionStateCreatedTokenLoaded, có nghĩa là:

Một trong hai trạng thái phiên ban đầu cho biết rằng mã thông báo được lưu trong bộ nhớ cache là được tải; khi một phiên là trong trạng thái này, một cuộc gọi để mở * sẽ cho kết quả trong một phiên mở, mà không UX hoặc chuyển đổi ứng dụng

thanh toán các SessionLoginSample để biết thêm.

isSessionValid - đây tại là

FBSession.activeSession.isOpen 

thoại: @ "thức ăn" andParams: params andDelegate: ủy - đây là vẫn như nhau, tuy nhiên bạn phải tạo ra các ví dụ facebook như thế này trước khi sử dụng nó:

Facebook *facebook = [[Facebook alloc] initWithAppId:FBSession.activeSession.appID andDelegate:nil]; 
facebook.accessToken = FBSession.activeSession.accessToken; 
facebook.expirationDate = FBSession.activeSession.expirationDate; 
//... normal code to setup a feed post 
[facebook dialog:@"feed" andParams:params andDelegate:self]; 
[facebook release]; 

thấy https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/ để biết thêm

"https://graph.facebook.com/me?fields=id,email,first_name & access_token =", - Các cuộc gọi đồ thị giờ đây đơn giản hơn rất nhiều. Bạn cũng có thể ghép chúng lại với nhau khá dễ dàng.

//[facebook requestWithGraphPath:@"me" andDelegate:self]; would become 
[FBRequestConnection startForMeWithCompletionHandler:^ 
    (FBRequestConnection *connection, id result, NSError *error) {}]; 

//[facebook requestWithGraphPath:@"me/albums" andParams:params andHttpMethod:@"POST" andDelegate:self]; would become 
    [FBRequestConnection startWithGraphPath:@"me/albums" 
          parameters:params 
          HTTPMethod:@"POST" 
         completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {}]; 

thấy https://developers.facebook.com/docs/howtos/batch-requests-ios-sdk/ để biết thêm

+0

THANKS cho phản hồi chu đáo và chi tiết - rất hữu ích. Khi tôi có cơ hội xác thực những điều này, tôi sẽ đảm bảo đánh dấu đây là phản hồi chính xác. cảm ơn một lần nữa. – leontx

+0

Chỉ cần tò mò như tôi phải làm công việc này chính xác và tôi đã tự hỏi phải mất bao lâu để tôi có thể đưa ra một ước tính phong nha. Cảm ơn –

+0

@JonathanDixon không lâu có lẽ 2-3 giờ. SDK mới vẫn bao gồm TẤT CẢ SDK cũ để bạn có thể tấn công dự án này theo từng phần. Chỉ cần thay thế những gì bạn cần và để phần còn lại sử dụng hệ thống cũ. Sau đó, từ từ nâng cấp. – odyth

Các vấn đề liên quan