2016-08-29 2 views
0

nicht erhalten Ich möchte Post an die Wand des Benutzers veröffentlichen. Ich weiß, dass Facebook Tester und Entwickler nur erlaubt, auf der Wand zu posten. Ich habe bereits Benutzer zur Testerliste hinzugefügt. Wenn ich versuche, die Veröffentlichungsberechtigung zu erhalten, heißt es, dass der Benutzer die Berechtigung bereits erteilt hat (wie im Screenshot gezeigt) und zurückkehrt. Ich bin nicht in der Lage, Erlaubnis zu erhalten oder an der Wand zu posten. Darüber hinaus Callbacks jede Methode wird auch nicht aufgerufen.Publish Permission mit Test-Benutzer Facebook Android

enter image description here

CODE

Ich habe Code von Facebook Beispiel RPSSample gefolgt.

//Publish to wall 
public void publishResult() { 

     registerPublishPermissionCallback(); 

     if (canPublish()) { //see definition below 
      ShareLinkContent content = new ShareLinkContent.Builder() 
        .setContentUrl(Uri.parse(urlToPost)) 
        .build(); 

      ShareApi.share(content, new FacebookCallback<Sharer.Result>() { 
       @Override 
       public void onSuccess(Sharer.Result result) { 
        callback.didShareOnFacebookSuccessfully(); 
       } 

       @Override 
       public void onCancel() { 
        // This should not happen 
       } 

       @Override 
       public void onError(FacebookException error) { 
        showToast(error.getMessage()); 
       } 
      }); 
     } 
    } 

//check if user has permission or not 
private boolean canPublish() { 
     final AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     if (accessToken != null) { 
      if (accessToken.getPermissions().contains(AppConstants.ADDITIONAL_PERMISSIONS)) { 
       // if we already have publish permissions, then go ahead and publish 
       return true; 
      } else { 
       // otherwise we ask the user if they'd like to publish to facebook 
       new AlertDialog.Builder(activity) 
         .setTitle(R.string.share_with_friends_title) 
         .setMessage(urlToPost) 
         .setPositiveButton(R.string.share_with_friends_yes, canPublishClickListener) 
         .setNegativeButton(R.string.share_with_friends_no, dontPublishClickListener) 
         .show(); 
       return false; 
      } 
     } 
     return false; 
    } 

//If user allows, ask Facebook to grant publish_action permission 
    private DialogInterface.OnClickListener canPublishClickListener = new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      if (AccessToken.getCurrentAccessToken() != null) { 
       // if they choose to publish, then we request for publish permissions 

       LoginManager.getInstance() 
         .setDefaultAudience(DefaultAudience.FRIENDS) 
         .logInWithPublishPermissions(activity, 
           Arrays.asList(AppConstants.ADDITIONAL_PERMISSIONS)); 
      } 
     } 
    }; 

//Callback - Any of the method doesn't call. 
private void registerPublishPermissionCallback() { 
     LoginManager.getInstance().registerCallback(
       callbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
         if (accessToken.getPermissions().contains(AppConstants.ADDITIONAL_PERMISSIONS)) { 
          publishResult(); 
         } else { 
          handleError("Not enough permissions to publish"); 
         } 
        } 

        @Override 
        public void onCancel() { 
        } 

        @Override 
        public void onError(FacebookException exception) { 
         handleError(exception.getMessage()); 
        } 

        private void handleError(String errorMessage) { 
         // this means the user did not grant us write permissions, so 
         // we don't do implicit publishes 
         showToast(errorMessage); 
        } 
       } 
     ); 
    } 

Meine App ist live auf der Konsole. Bitte führen Sie die Anforderungen von Facebook, um eine Veröffentlichungsberechtigung mit dem Testbenutzer zu erhalten. Vielen Dank.

+0

Entfernen Sie Ihre App von Facebook und versuchen Sie es erneut, es wird funktionieren. [So entfernen Sie App von Facebook] (https://www.facebook.com/help/170585223002660). Nach der Neuinstallation sollten Sie anstelle des von Ihnen freigegebenen Bildschirms die Berechtigung zum Veröffentlichen anfordern. –

+0

Entschuldigung, aber das Entfernen der App ist keine Lösung – NightFury

Antwort

0

Endlich in der Lage, das Problem zu lösen. Es gab kein Problem im Code. Es war ein Einstellungs/Berechtigungsproblem mit der Facebook App. Dies sind Schritte, die ich gefolgt:

  1. Entfernen Sie den Benutzer von Test-Rolle Abschnitt in Ihrer Facebook-Entwicklerkonsole.
  2. Widerrufen Sie den Zugriff der App, indem Sie sich bei diesem Benutzerkonto anmelden. Gehe zu Einstellungen> Apps. Entferne die App von dort. Sie müssen 10-15 Minuten warten, da es Zeit von Facebook-Seite braucht, um den Zugriff vollständig zu widerrufen.
  3. Machen Sie Ihre Facebook-App im Sandbox-Modus (Sie müssen dies tun, um den Veröffentlichungstest durchzuführen).
  4. Einloggen Sie Ihre Android-App mit einem anderen Facebook-Konto als App Admin. Es sollte der Fehler auftreten, dass sich die App im Entwicklungsmodus befindet.
  5. Benutzer als Tester in der Facebook Console App hinzufügen. Dieser Benutzer muss möglicherweise eine ausstehende Anforderung an seiner Seite genehmigen.
  6. Von diesem Benutzerkonto anmelden. Facebook wird Sie nun bitten, grundlegende Informationen für die App bereitzustellen. Danach können Sie die Veröffentlichung testen. Sie können erfolgreich auf der Benutzerwand posten.

Hoffe, das hilft jemandem!

0

Verwenden Sie den folgenden Code, um zu prüfen, ob die Berechtigung erteilt wurde oder nicht.

String url = "/" + "(userFbID)" + "/permissions"; 
    new GraphRequest(AccessToken.getCurrentAccessToken(), url, null, 
         HttpMethod.GET, new GraphRequest.Callback() { 

          public void onCompleted(GraphResponse response) { 



           try { 

            JSONObject json = new JSONObject(
              response.getRawResponse()); 

            JSONArray data = json.getJSONArray("data"); 

            boolean isPermitted = false; 

            for (int i = 0; i < data.length(); i++) { 

             if (data.getJSONObject(i) 
               .getString("permission") 
               .equals("publish_actions")) { 
              isPermitted = true; 

              String status = data.getJSONObject(i) 
                .getString("status"); 

              if (status.equals("granted")) { 

               publishResult() 

              } else { 

               LoginFacebook(); 
              } 

              break; 
             } 
            } 

            if (!isPermitted) { 
             LoginFacebook(); 
            } 

           } catch (Exception e) { 
            e.printStackTrace(); 
           } 
          } 

         }).executeAsync(); 

Ersetzen Sie die fb-ID des Benutzers am Ort von (userFbID).

Wenn die Berechtigung nicht erteilt wird, verwenden Sie diese Funktion, um den Benutzer nach dieser Berechtigung zu fragen.

private void LoginFacebook() { 

      loginManager = LoginManager.getInstance(); 

      loginManager.logInWithPublishPermissions(this, 
        Arrays.asList("publish_actions")); 

      loginManager.registerCallback(callbackManager, 
        new FacebookCallback<LoginResult>() { 

         @Override 
         public void onSuccess(LoginResult loginResult) { 



          publishResult() 
         } 

         @Override 
         public void onError(FacebookException error) { 

         } 

         @Override 
         public void onCancel() { 

         } 

        }); 
     }