5

W Facebooka Android SDK gdy zgłoszęFacebook Android SDK Sesja openForPublish nie tworząc nową sesję

Session tempSession = new Builder(this).build(); 
Session.setActiveSession(tempSession); 
tempSession.openForRead(new OpenRequest(this).setPermissions(FB_PERMISSIONS)); 

to dostaje sesję FB i wszystko działa normalnie. Ale kiedy zastąpię Read z Publish. tzn. podąża za

Daje komunikat, że sesja jest pusta i nie może uzyskać uprawnień do publikowania do pustej sesji.

Czy możesz powiedzieć, dlaczego tak jest i jaki byłby najlepszy sposób, aby sobie z tym poradzić?

Odpowiedz

4

Krótka odpowiedź brzmi: nie wywołuj openForPublish. Zadzwoń na openForRead, a następnie requestNewPublishPermissions później, jeśli potrzebujesz uprawnień do publikowania.

Długa odpowiedź brzmi: nie możesz żądać uprawnień do publikowania (na użytkownika, który nigdy nie był połączony z Facebookiem przez twoją aplikację), chyba że masz już podstawowe lub domyślne uprawnienia (co byś otrzymał, gdybyś zadzwonił do OpenForRead za pomocą pusty zestaw uprawnień). Tak więc openForPublish faktycznie obsługuje bardzo specyficzny przypadek użycia, którego większość aplikacji prawdopodobnie nie posiada.

+9

Hmm, bardzo zły projekt sdk FB. – rahulg

+0

Mam ten sam problem, muszę zezwolić mojej aplikacji na facebooka na udostępnianie danych na ścianie użytkownika, za każdym razem, gdy otwieram sesję do publikacji, nie odczytuje ona tokenu użytkownika z zainstalowanej aplikacji i prosi o ponowne wpisanie referencje, więc znalazłeś coś, co mogłoby mi pomóc –

7

Zajęło mi trochę czasu, aby rozwiązać ten problem, aby użytkownik mógł kliknąć przycisk, aby udostępnić jeden z moich produktów na Facebooku w kanale. Nie chciałem, aby zachęcano ich do logowania, dopóki naprawdę nie chcieli się nimi dzielić, więc naprawdę chciałem uzyskać pozwolenie na publikację. Następujące stosy początkowe żądanie logowania/odczytu uprawnień z prośbą o pozwolenie na publikację. Spowoduje to podwójne zgłoszenie użytkowników, najpierw do odczytu, a następnie do opublikowania, ale jest to wymagane teraz, niezależnie od rozwiązania:

Session session = Session.getActiveSession(); 

if (session == null) { 
    session = new Session.Builder(this).setApplicationId("<APP ID HERE>").build(); 

    Session.setActiveSession(session); 
    session.addCallback(new StatusCallback() { 
     public void call(Session session, SessionState state, Exception exception) { 
      if (state == SessionState.OPENED) { 
       Session.OpenRequest openRequest = new Session.OpenRequest(FacebookActivity.this); 
       openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); 
       session.requestNewPublishPermissions(
         new Session.NewPermissionsRequest(FacebookActivity.this, PERMISSIONS)); 
      } 
      else if (state == SessionState.OPENED_TOKEN_UPDATED) { 
       publishSomething(); 
      } 
      else if (state == SessionState.CLOSED_LOGIN_FAILED) { 
       session.closeAndClearTokenInformation(); 
       // Possibly finish the activity 
      } 
      else if (state == SessionState.CLOSED) { 
       session.close(); 
       // Possibly finish the activity 
      } 
     }}); 
} 

if (!session.isOpened()) { 
    Session.OpenRequest openRequest = new Session.OpenRequest(this); 
    openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); 
    session.openForRead(openRequest); 
} 
else 
    publishSomething(); 
Powiązane problemy