2013-02-28 8 views
19

Prima di dire che non è possibile, apri l'app Spotify e premi il pulsante di accesso con Facebook.Leggi e pubblica autorizzazioni in una richiesta

Mi chiedo come hanno fatto, e come posso ottenere "publish_stream" e permessi/email di base in una sola richiesta.

Inoltre, è possibile riaprire una sessione di Facebook utilizzando l'SDK di Facebook se si dispone di determinate informazioni dall'ultima sessione (l'ultima volta che hanno utilizzato l'app)?

EDIT -SCREENSHOTS SOTTO PER IL musicalmente scongiurare

Spotify magic

+0

Proprio perché è possibile per Spotify non significa che la funzionalità è estesa a tutte le altre app. Conosci altre app in grado di aprire applicazioni per computer di terze parti direttamente da FB? –

+0

Stai suggerendo che Spotify stia piggyback da Facebook per compensare i suoi pagamenti in streaming di royalties e che Zuckerberg stia promuovendo la partnership grazie al suo amore riconosciuto da tempo per i servizi di streaming P2P? ...questo è pazzesco. – baconcheese113

+0

Verifica la risposta di @ Vijay. L'ho modificato –

risposta

20

Che cosa mai si è visto su Spotify non è il risultato di publish_stream .Che cosa che hanno utilizzato è il Open Graph

concetti Open Graph coinvolge integrando le azioni delle app con il post di attività FB e condividere con gli utenti attraverso l'applicazione usano. Leggi di più al link sopra menzionato.


modifiche Spiegazione: Check the Open Graph Permissions

Esempio di attività:

public class MainActivity extends Activity implements StatusCallback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     OpenRequest open = new OpenRequest(this); 
     open.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 
     open.setPermissions(Arrays.asList(new String[]{"email", "publish_actions", "user_birthday", "user_hometown"})); 
     open.setCallback(this); 
     Session s = new Session(this); 
     s.openForPublish(open); 
    } 

    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(Session.getActiveSession()!=null) 
      Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
    } 
} 

Questa attività mostra questo (se l'utente non è connesso):

enter image description here

+1

Questa è la risposta giusta. Prova ad aggiungere l'autorizzazione 'publish_actions'. Modifica questa risposta e aggiungo un test. –

+0

sto cercando esattamente di fare lo stesso login FB (come pinterest) con email di autorizzazione, basic_info, publish_action in una singola request.implemented sopra il codice ma non posso farlo ... plz help ... – sanjay

0

Vai al cruscotto applicazione. quindi fai clic su modifica app. ora nella parte sinistra della pagina vedrai Permission. cliccalo. verrà una nuova pagina. scopri la casella User & Friend Permissions:. qui digitare publish_actions. ora salva.

ora dalla tua app Android è possibile pubblicare la storia su Facebook accedendo solo una volta. Voglio dire, effettua il login usando LoginButton e prova a pubblicare qualcosa. dovrebbe funzionare.

fammi sapere cosa succede.

+0

Questo non sembra funzionare dalla mia app mobile. Ho provato con la mia implementazione della gestione delle sessioni (openSessionForPublish senza le autorizzazioni di lettura) e con gli strumenti forniti da Facebook SDK (com.facebook.widget.LoginButton e impostando le autorizzazioni di lettura e pubblicazione). Entrambi gli errori di lancio indicano che non è possibile richiedere entrambi contemporaneamente. – baconcheese113

+0

basta richiedere un permesso di lettura. @ baconcheese113 – Shoshi

+0

Quindi richiede solo il permesso di lettura. openSessionForRead ("app_id", "permission_list") – baconcheese113

0

Per tutti coloro che si interroga sulla seconda parte della mia domanda:

di riaprire una sessione di Facebook utilizzando l'uso SDK Facebook questo codice

if(Session.openActiveSession(this) == null) { //Haven't logged in yet 
    openSessionForRead(getString(R.string.app_id), Arrays.asList("email")); 
} 

Facebook memorizza nella cache il token.

1

Nella mia app ho creato un'istanza per OpenRequest e ne ho impostato le autorizzazioni.

Session currentSession = Session.getActiveSession(); 
if (currentSession == null || currentSession.getState().isClosed()) 
{ 
    Session session = new Session.Builder(context).build(); 
    Session.setActiveSession(session); 
    currentSession = session; 
} 

if (currentSession.isOpened()) 
{ 
    //Do whatever u want. User has logged in 
} 
else if(!currentSession.isOpened()) 
{ 
    //Ask for username and password 
    OpenRequest op = new Session.OpenRequest(context); 

    op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 
    op.setCallback(null); 

    List<String> permissions = new ArrayList<String>(); 
    permissions.add("publish_stream"); 
    op.setPermissions(permissions); 

    Session session = new Builder(InvitePartners.this).build(); 
    Session.setActiveSession(session); 
    session.openForPublish(op); 
} 

Potrebbe esserti utile.

1

L'ho impostato separatamente nel metodo onCreate.

LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton); 
    authButton.setPublishPermissions("publish_actions"); 
    authButton.setFragment(this); 
    Session.NewPermissionsRequest newPermissionsRequest = new 
      Session.NewPermissionsRequest(this, Arrays.asList("read_stream")); 
    Session.getActiveSession().requestNewReadPermissions(newPermissionsRequest);