2012-03-19 31 views
6

UPDATE: Aşağıdaki sorunun, yalnızca kullanıcı zaten benim appuma Facebook erişimi verdiyse ve ardından uygulamamı yeniden başlatırsa gerçekleştiğini fark ettim. Uygulamamdaki kullanıcı Facebook düğmesini ilk kez seçtiğinde, kimlik doğrulaması almak için Facebook uygulamasına gider, ancak kimlik doğrulama durumu Facebook uygulamasında hala kayıtlı olduğundan, kullanıcıya açıklama yapmadan hemen uygulamamıza döner. postToFacebookWall yöntemi başarısız.Facebook SDK Facebook uygulaması yüklü iOS uygulaması ile oturum aç

GÜNCELLEME 2: Burada bulunan çözümü uygulayarak sona erdim: How to authorize user through a DIALOG with the NEW Facebook Connect iOS API? ve Facebook uygulamasından kaçınıldı. Safari daha iyidir çünkü en azından kullanıcı oturum açacaklarını belirten bir mesaj alır. Ancak Feed Diyaloğu daha önce olduğu gibi ilk kez başarısız olur.


Yaygın bir sorun olması gereken şeylere sahibim, ancak henüz çözümü bulamadım. Uygulamamın iOS 5 ve üstü ile sınırlı olduğunu unutmayın.

Bir kullanıcı duvarına göndermek için bir Facebook düğmesiyle bir uygulamam var. Düğmeye basıldığında, uygulama, kullanıcıya uygulamanın duvarda yayınlamak için zaten izin vermiş olup olmadığını kontrol edecektir. Varsa, bir görünüm duvar posta bilgileri ile bir Besleme İletişim kutusu ile açılır. Eğer yapmadılarsa, Safari açılacak ve kullanıcı giriş yapacaktır. Giriş yaptıktan sonra uygulamaya geri alınacak ve Feed Dialog görünümü açılır.

Bu, Facebook uygulaması yüklü değilse, Simülatörde ve cihazımda çalışır. Facebook uygulaması yüklüyse, kullanıcı Facebook uygulamasına alınır, ancak kullanıcının herhangi bir şey yapmasına izin vermeden hemen orijinal uygulamaya döndü. Feed Dialog açılır, ancak tamamen boş ve otomatik olarak reddeder. Facebook düğmesine tekrar basmak, kullanıcının App duvarına gönderilmek üzere uygulama izni vermesi beklendiği gibi Feed Dialog görünümünü de getirecektir.

Hemen hemen adreste bulunan talimatları takip: Burada http://developers.facebook.com/docs/mobile/ios/build/#implementsso

ve: AppDelegate yılında http://developers.facebook.com/docs/reference/dialogs/feed/

Aşağıdaki kod var:

- (void)loginToFacebook 
{ 
    // Set up facebook 
    self.facebook = [[Facebook alloc] initWithAppId:@"YOUR_APP_ID" andDelegate:self]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    if ([defaults objectForKey:@"FBAccessTokenKey"] 
     && [defaults objectForKey:@"FBExpirationDateKey"]) { 
     self.facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
     self.facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
    } 

    if (![self.facebook isSessionValid]) { 
     [self.facebook authorize:nil]; 
    } 
} 

// This is an FBSessionDelegate protocol method 
// that gets called after a successful login 
- (void)fbDidLogin 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[self.facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[self.facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"POST_TO_FACEBOOK_WALL" object:nil]; 
} 

// This is a UIApplicationDelegate protocol method 
// It is called when safari is dismissed 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    return [self.facebook handleOpenURL:url]; 
} 

bu arasındaki tek fark ve örnek kod, aşağıdaki koduma sahip olan görünüm denetleyicim tarafından alınan bir NSNotification ekledim:

- (void)facebookButtonPressed:(UIControl*)sender 
    { 
     Facebook *facebook = [(AppDelegate*)[[UIApplication sharedApplication] delegate] facebook]; 

     if (![facebook isSessionValid]) 
     { 
      // Login to facebook if not already logged in 
      [(AppDelegate*)[[UIApplication sharedApplication] delegate] loginToFacebook]; 
     } 
     else 
     { 
      [self postToFacebookWall]; 
     } 

    } 

    - (void)postToFacebookWall 
    { 
     Facebook *facebook = [(AppDelegate*)[[UIApplication sharedApplication] delegate] facebook]; 

     /*Facebook Application ID*/ 
     // TODO: Get this either from the AppDelegate facebook property or the info plist 
     NSString *client_id = @"YOUR_APP_ID"; 

     NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
    kAppId, @"app_id", 
    @"http://developers.facebook.com/docs/reference/dialogs/", @"link", 
    @"http://fbrell.com/f8.jpg", @"picture", 
    @"Facebook Dialogs", @"name", 
    @"Reference Documentation", @"caption", 
    @"Using Dialogs to interact with users.", @"description", 
    nil]; 

     [facebook dialog:@"feed" andParams:params andDelegate:self]; 
    } 

kimse benim sorunun nasıl çözüleceğine biliyor mu? (Ayrıca, açık değilse, YOUR_APP_ID kodumdaki uygulama kimliğimle değiştirilir). o 'uygulama kurulduğunda sadece authed sonra kaldırıldı, daha sonra yeniden' bu senaryo olması ile

cevap

3

Bu dışı bir durum gibi geliyor.

Bu özel şeyde "klasik web görünümü Doğrulama" geri düşmek gerekir. Ayrıca, sanıyorum safari auth da kullanabilirsin.

+0

sesler o. Bir deneyeyim. – Darren

İlgili konular