2012-10-16 14 views
16

facebook 3.1 ios sdk'de yayınlama izinleriyle giriş yapmakta sorun yaşıyorum.Facebook iOS 3.1 sdk giriş izni ile giriş izni geri bildirimi

Uygulamamın bir videoyu paylaşmak için bir düğmesi var ve kullanıcı tıkladığında temel + yayınlama iznini eklemek istiyorum. Anlıyorum gibi, ben iki çağrıyı yapmak zorunda -

  1. openActiveSessionWithReadPermissions ve sonra
  2. reauthorizeWithPublishPermissions
  3. İşte

şimdi kullanıyorum kodu: Görüyorum

//Opens a Facebook session and optionally shows the login UX. 
- (void)openSessionForReadPermissions 
{ 
    [FBSession openActiveSessionWithReadPermissions:nil 
             allowLoginUI:YES 
            completionHandler: 
    ^(FBSession *session, 
     FBSessionState state, NSError *error) { 

     //this is called even from the reauthorizeWithPublishPermissions 
     if (state == FBSessionStateOpen && !error) 
     { 
      [self openSessionForPublishPermissions]; 
     } 
     else if (state == FBSessionStateClosedLoginFailed) 
     { 
      [FBSession.activeSession closeAndClearTokenInformation]; 

      [[NSNotificationCenter defaultCenter] postNotificationName:FBLoginErrorNotification object:session]; 
     } 
    }]; 
} 

-(void)openSessionForPublishPermissions 
{  
    NSArray* permissions = [NSArray arrayWithObject:@"publish_stream"]; 

    [[FBSession activeSession] reauthorizeWithPublishPermissions:permissions 
               defaultAudience:FBSessionDefaultAudienceFriends 
               completionHandler: 
    ^(FBSession *session, NSError *error) 
    { 
     if (!error) 
     { 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:FBLoginSuccessNotification 
       object:session]; 
     } 
     else 
     { 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:FBLoginErrorNotification 
       object:session]; 
     } 
    }]; 
} 

openSessionForReadPermissions içindeki blok, iki kez çağrılır (bir kez FBSessionStateOpen ile ve bir kez de openSessionForPublishPermissions çağrısından FBSessionStateOpenTokenExtended ile) İlk olarak uygulamaya giriş yapmaya çalışırken (daha önce tüm uygulama izinlerini sildiyse) ErrorReauthorizeFailedReasonUserCancelled alıyorum.

Bu girişi uygulamak için uygun yol nedir? Bu tek özellik hariç uygulama, Facebook oturum açma gerektirmez, bu yüzden giriş işlemi aynı düğme basma üzerinde olmalıdır.

Teşekkürler!

+0

+1 Özellikle karma izinli arama daraltıldığından, aynı sorunla uğraşıyoruz. –

+0

reauthorizeWithPublishPermissions değer kaybetti. Bunun yerine requestNewPublishPermissions kullanın. – John

cevap

26

Aynı sorunu yaşadım. Bulduğum çözüm, aramayı bir dispatch_async bloğunda [self openSessionForPublishPermissions];'a kaydırıyordu.

Örnek:

dispatch_async(dispatch_get_current_queue(), ^{ 
    [self openSessionForPublishPermissions]; 
}); 

nedeni çağrı .. openActiveSession .. denir hangi olay döngü sonra olmalıdır yeniden yetkilendirmesi olmasıdır.

+0

Teşekkürler! Bu böcek günlerce kafamı yıkıyor. – Tiddly

0

Bu, herhangi bir şansın, bir kesme noktasına çarpmak için bir zaman aşımı olabilir mi? Bu hatayı bir kez aldım ancak mola noktaları devre dışı bırakıldıktan sonra tekrar başlamadı.

İlgili konular