Post id facebook share dialog всегда возвращает null в Android

Я использовал тестовый идентификатор приложения и регистрировался при помощи тестового пользователя, созданного в приложении dash_board, на сайте разработки facebook, для разрешения на использование имени пользователя необходимо указать разрешение на использование имени пользователя. Вот мой код:

....
shareDialog = new ShareDialog(MainActivity.this);
 shareDialog.registerCallback(callbackManager, new FacebookCallback<sharer.result>() {
 @Override
 public void onSuccess(Sharer.Result result) {
 if (result.getPostId() != null)
 Log.e(TAG, result.getPostId());
 }
 @Override
 public void onCancel() {
 }
 @Override
 public void onError(FacebookException e) {
 }
 });
 pulishButton.setOnClickListener(this);
 try{
 loginButton.setPublishPermissions(new String[]{"publish_actions","publish_stream"});
 }catch (FacebookException e){
 e.printStackTrace();
 }
 loginButton.registerCallback(callbackManager, new FacebookCallback<loginresult>() {
 @Override
 public void onSuccess(LoginResult loginResult) {
 Log.e(TAG, "success");
 loginButton.setEnabled(false);
 pulishButton.setEnabled(true);
 GraphRequest.newMeRequest(
 loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
 @Override
 public void onCompleted(JSONObject json, GraphResponse response) {
 if (response.getError() != null) {
 // handle error
 System.out.println("ERROR");
 } else {
 System.out.println("Success");
 } catch (JSONException e) {
 e.printStackTrace();
 }
 }
 }
 }).executeAsync();
 }
 @Override
 public void onCancel() {
 Log.e(TAG, "On cancel");
 }
 @Override
 public void onError(FacebookException e) {
 Log.d(TAG, e.toString());
 }
 });
</loginresult></sharer.result>
2 ответа

Решение состоит в том, чтобы заставить ShareDialog использовать режим подачи и не использовать приложение FB для обмена:

shareDialog.show(linkContent, ShareDialog.Mode.FEED);

Я считаю, что это ошибка FB. Они не отправляют postId в callback onSuccess при использовании приложения FB для совместного использования (postId = null), но они действуют, если вы используете Feed.

Я слышал, что вы можете избежать проблемы "postId = null", используя Facebook Login и требуя разрешения "publish_actions". Но я не думаю, что это правильный способ справиться с этой проблемой. В отношении упомянутого разрешения Facebook заявляет:

Публикация через диалоги или социальные плагины не требует этого разрешения. Не запрашивайте проверку этого разрешения, если вы используете только диалоговое окно "Общий доступ", "Диалог каналов", "Диалог сообщений" и т.д.) Или "Социальные плагины" (например, кнопка "Like" ).

Документы Facebook в диалоговом окне "Общий доступ":

Это не требует входа в Facebook или любых расширенных разрешений, поэтому это самый простой способ включить совместное использование в Интернете.


Вы не можете войти в систему напрямую с помощью "publish_action", вам нужно сначала войти в систему с любым разрешением на чтение, а затем запросить разрешения на публикацию https://developers.facebook.com/docs/facebook-login/permissions/v2.4#publishing

licensed under cc by-sa 3.0 with attribution.