9

Ich befolge die Facebook-Android-Freigabe-Anleitung von Facebook (https://developers.facebook.com/docs/android/share). Die App läuft gut und ich kann mich mit Facebook mit einem Klick auf den Demo-Share-Button einloggen. Das ist also das Verfahren meiner App:Facebook SDK 3.8: Berechtigung publish_actions nicht zurückgegeben

  1. Einloggen mit Facebook
  2. Die Facebook-Session-Objekt aktualisiert wird und die folgenden Berechtigungen werden im Session-Objekt gespeichert: user_likes, user_friends, user_status, basic_info
  3. Nun, ich möchte etwas teilen. Daher der Benutzer klickt auf einer Share-Taste und eine Anforderung für eine zusätzliche Erlaubnis genannt publish_actions
  4. gemacht wird

Der folgende Code führt diese Anfrage:

public class MainActivity extends Activity { 

    private Button shareButton; 
    private UiLifecycleHelper uiHelper; 
    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 
    private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; 
    private boolean pendingPublishReauthorization = false; 

... 
    private void publishStory() { 
     Session session = Session.getActiveSession(); 
     if(session != null) { 
      List<String> permissions = session.getPermissions(); 
      if(!isSubsetOf(PERMISSIONS, permissions)) { 
       pendingPublishReauthorization = true; 
       Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS); 
//Request the new permission here. The answer is processed in onSessionStateChange() method 
       session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 

... 

    private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
//since the session is already open we enter this if branch 
     if (state.isOpened()) { 
      shareButton.setVisibility(View.VISIBLE); 
//The result of state.equals(SessionState.OPENED_TOKEN_UPDATED) is false which indicates that the session object has not been updated (as far as I understand the fb api) 
      Log.e(TAG, "state.equals(SessionState.OPENED_TOKEN_UPDATED) = " + state.equals(SessionState.OPENED_TOKEN_UPDATED)); 
//Output all the current permission the session has (publish_actions is not included here) 
      List<String> permissions = session.getPermissions(); 
      Iterator<String> it = permissions.iterator(); 
      Log.e(TAG, "Content of list:"); 
      while(it.hasNext()) 
       Log.e(TAG, "permission = " + it.next()); 
//Since the OPENED_TOKEN_UPDATED has not been updated nothing further happens here    
      if (pendingPublishReauthorization && state.equals(SessionState.OPENED_TOKEN_UPDATED)) { 
       pendingPublishReauthorization = false; 
       publishStory(); 
      } 
     } else if (state.isClosed()) { 
      shareButton.setVisibility(View.INVISIBLE); 
     } 
    } 

So, obwohl dies dort richtig zu sein scheint sein muss ein paar verbleibende Fehler. Die Berechtigung publish_actions wird nicht gewährt, aber ich verstehe nicht warum. Nur die vorhandenen Berechtigungen bleiben 10.

Weitere Anmerkung: Ich habe einige Fragen gelesen, die besagen, dass ein zusätzliches Popup angezeigt werden sollte, in dem der Benutzer aufgefordert wird, die Berechtigung zu erteilen. In meinem Fall passiert das nicht. Vielleicht ist das das Problem? Wenn ja, was muss ich tun, um das Popup-Fenster zu erhalten?

AKTUALISIERUNG: Ich habe auch die folgenden Punkte aus Github getestet: https://gist.github.com/vishalpawale/5556996 Dieser Beispielcode schlägt aus genau dem gleichen Grund fehl. Es erhält keine publish_action-Berechtigung. Scheint es sich um einen tatsächlichen Fehler im Facebook SDK zu handeln?

+0

Ich bin mir nicht sicher, aber ich versuche jetzt, dieses Problem zu lösen. Anscheinend zog Facebook die Möglichkeit zurück, Beiträge über die API zu veröffentlichen. Hast du irgendeine Lösung gefunden? – Wordica

+0

Ich folgte developers.facebook.com/docs/android/share Beispiel, um an eine Benutzerwand zu posten. Es funktioniert gut, wenn ich mich bei Facebook mit Apps Entwickler E-Mail anmelden. Mit Nicht-Entwicklern bekomme ich die Berechtigungen nicht ... Passiert das auch für dich? –

+0

gleiche Ausgabe, publish_action-Berechtigung nicht erteilt. –

Antwort

0

wenn Sie Facebook sdk 3.14.x verwenden + thn nach dem 30. April die Facebook-Anwendung Prüfung und Einreichungsprozess geändert hat. Gepostet in Bezug auf die Erlaubnis. überprüfen this link

0

Wir hatten das gleiche Problem hier.

Versuchen Sie es mit:

Session.getActiveSession().refreshPermissions(); 

Dies wird die Liste der Berechtigungen auf

List<String> permissions = session.getPermissions(); 

aktualisieren Es wird nur mit Facebook arbeiten registrierte Entwickler Benutzer oder Test Benutzer über das Dashboard-Facebook App registriert.

Dies funktionierte für uns.

0

Es gibt nur Leseberechtigung zurück, nicht die Schreibberechtigung. Versuchen Sie das Snippet unter

final Bundle permBundle = new Bundle(); 
    permBundle.putCharSequence("permission", "publish_actions"); 
    GraphRequest request = new GraphRequest(
      AccessToken.getCurrentAccessToken(), 
      "/me/permissions", permBundle, HttpMethod.GET, 
      new GraphRequest.Callback() { 
       @Override 
       public void onCompleted(GraphResponse graphResponse) { 
        Log.d(TAG, "response2: " + graphResponse.getJSONObject()); 
        try { 
         JSONArray permList = (JSONArray) graphResponse.getJSONObject().get("data"); 
         if(permList.length() == 0){ 
          // no data for perms, hence asking permission 
          askForFBPublishPerm(); 
         }else{ 
          JSONObject permData = (JSONObject) permList.get(0); 
          String permVal = (String) permData.get("status"); 
          if(permVal.equals("granted")){ 
           postToFB(); 
          }else{ 
           askForFBPublishPerm(); 
          } 
         } 
        } catch (JSONException e) { 
         Log.d(TAG, "exception while parsing fb check perm data" + e.toString()); 
        } 

       } 
      } 
    ); 
    request.executeAsync();