2012-11-19 18 views
6

Son zamanlarda Facebook SDK 3.1 kullanmaya başladık ve openActiveSessionWithReadPermissions kullanarak oturum açmada bazı sorunlarla karşılaşıyorum.openActiveSessionWithReadPermissions otomatik olarak oturum açmıyor

Aslında, günlük olarak çalışır, önbelleğe alınmış bir belirteç varsa, Facebook kullanıcı arabirimi sunmadan oturum açar ve eğer değilse, kullanıcı arabirimini sunar.

reauthorizeWithPublishPermissions numaralı telefonu aradıktan sonra sorun oluşuyor. reauthorizeWithPublishPermissions numaralı telefonu arayarak uygulamayı kapatıp yeniden açarak openActiveSessionWithReadPermissions numaralı telefonu arayın, Facebook kullanıcı arayüzünü sunar ve kullanıcının önbelleğe alınmış bir belirteç olmasına rağmen "evet, okuma izinleri ile tamam" seçeneğini belirtmesini ister.

reauthorizeWithPublishPermissions numaralı telefonu arayarak yalnızca Facebook kullanıcı arayüzünü hatalı olarak gösterir, aksi halde her şey yolunda çalışır. okuma kodu için açık

:

[FBSession openActiveSessionWithReadPermissions:readpermissions allowLoginUI:YES 
             completionHandler:^(FBSession *aSession, FBSessionState status, NSError *error) { 
      [self sessionStateChanged:[FBSession activeSession] state:status error:error]; 
      if (status != FBSessionStateOpenTokenExtended) { 
       // and here we make sure to update our UX according to the new session state 
       FBRequest *me = [[FBRequest alloc] initWithSession:aSession 
                 graphPath:@"me"]; 
       [me startWithCompletionHandler:^(FBRequestConnection *connection, 
               NSDictionary<FBGraphUser> *aUser, 
               NSError *error) { 
        self.user = aUser; 

        aCompletionBlock(aSession, status, error); 
       }]; 
      } 
     }]; 

sessionStateChanged fonksiyonu: Önceden her şey için

- (void)doPublishAction:(void(^)(FBSession *aSession, NSError *error))aPublishAction { 

    if ([FBSession.activeSession.permissions 
     indexOfObject:@"publish_actions"] == NSNotFound) { 

     NSArray *writepermissions = [[NSArray alloc] initWithObjects: 
            @"publish_stream", 
            @"publish_actions", 
            nil]; 

     [[FBSession activeSession]reauthorizeWithPublishPermissions:writepermissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *aSession, NSError *error){ 
      if (error) { 
       NSLog(@"Error on public permissions: %@", error); 
      } 
      else { 
       aPublishAction(aSession, error); 
      } 


     }]; 

    } 
    else { 
     // If permissions present, publish the story 
     aPublishAction(FBSession.activeSession, nil); 
    } 
} 

Tesekkür Edenler:

- (void)sessionStateChanged:(FBSession *)aSession state:(FBSessionState)state error:(NSError *)error { 

    if (aSession.isOpen) { 
     // Initiate a Facebook instance and properties 
     if (nil == self.facebook || state == FBSessionStateOpenTokenExtended) { 
      self.facebook = [[Facebook alloc] 
          initWithAppId:FBSession.activeSession.appID 
          andDelegate:nil]; 

      // Store the Facebook session information 
      self.facebook.accessToken = FBSession.activeSession.accessToken; 
      self.facebook.expirationDate = FBSession.activeSession.expirationDate; 
     } 
    } else { 
     // Clear out the Facebook instance 
     if (state == FBSessionStateClosedLoginFailed) { 
      [FBSession.activeSession closeAndClearTokenInformation]; 
     } 
     self.facebook = nil; 
    } 
} 

test için boş aPublishAction ile, çağrıyı Yayınla , Her türlü yardım için minnettar olurum!

+0

Bence publish_actions, ihtiyacınız olan her şeydir. Sanırım şimdi yayınları akıtıyor. – SAHM

+0

Bunun için bir çözüm buldunuz mu? Tam olarak aynı problemi yaşıyorum. – Casey

+0

hiçbir zaman çözüm bulunamadı, yayınlama izinleri almayı durdurduk, bu yüzden bir çözüm bulmamız gerekmiyordu. –

cevap

6

Sen migration kılavuzunda belirtildiği gibi uygulamanızın temsilci içinde -(void) applicationDidBecomeActive:(UIApplication *)application yöntemine

[FBSession.activeSession handleDidBecomeActive];

eklemeniz gerekir.

+0

Bu satır kümesine sahibim, işlev şu şekilde görünür: - (geçersiz) applicationDidBecomeActive: (UIApplication *) application { [FBSession.activeSession handleDidBecomeActive]; } açıklığa kavuşturmak için, uygulamayı sonlandırdığım ve yeniden açtığımda sorun oluşuyor. –

+0

Merhaba. Bu yüzden, anladığım kadarıyla, oturum açıkken tekrar + + [FBsession openActiveSessionWithReadPermissions: allowLoginUI: completionHandler:] 'yeniden arama şansı var mı? Bu gerçekleşirse, varsayılan davranış oturumu kapatmak ve tekrar açmayı denemektir, bu da sorunu açıklar. – ale0xB

+0

Bunun şansının olmadığını doğrulayabilirim. Söylediğim gibi, bu sorun, yalnızca önceki uygulama oturumunda "Yeniden YayınlaWithPublishPermissions" çağrıldığında oluşur. Bu bana sorunun neden olduğuna inanıyorum. –

-2

openActiveSessionWithReadPermissions yerine openActiveSessionWithPermissions kullanırsanız ne olur?

+0

Orijinal olarak sahip olduğum ve mükemmel bir şekilde çalıştı. Ancak anladığım kadarıyla, bu, Facebook SDK 3.0'dan amortismanlı bir yöntem ve Facebook SDK 3.1'in yeni sistemine geçmek için, okuma talep etmek için 'openActiveSessionWithReadPermissions' özelliğini kullanarak okuma ve yazma izinlerini ayrı olarak talep etmeli ve ''WithPublishPermissions'i yeniden yetkilendirmeli. yazmak için yazmak. Bu yeni sistemde sorun yaşıyorum. –

+1

openActiveSessionWithPermissions kullanımdan kaldırılmıştır. – gran33

İlgili konular