2015-12-21 3 views
3

У меня проблема с обменом что-то с FacebookSDK в приложении для Android LibGDX. Если я нажму кнопку «Поделиться» и поделюсь чем-то, я вернусь Sharer.Resultnull (так что сообщение не является общим, но на самом деле это!), Что является тем же результатом, который я получаю, когда я отменяю общий доступ.Обмен Facebook в Libgdx с 4.x Facebook SDK

Вот мой код:

Android Manifest 
<meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/facebook_app_id"/> 


    <provider android:authorities="com.facebook.app.FacebookContentProviderMYFACEBOOKID" 
       android:name="com.facebook.FacebookContentProvider" 
       android:exported="true"/> 

    <activity android:name="com.facebook.FacebookActivity" 
       android:configChanges= 
        "keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
       android:theme="@android:style/Theme.Translucent.NoTitleBar" 
       android:label="@string/app_name" /> 
</application> 

AndroidLauncher.java (деятельность, которая начинается все приложения):

@Override 
protected void onResume() { 
    FacebookSdk.sdkInitialize(this); 
    super.onResume(); 
    AppEventsLogger.activateApp(this); 
} 

@Override 
public void onActivityResult(final int requestCode, final int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    facebookPluginAndroid.getCallbackManager().onActivityResult(requestCode, resultCode, data); 
} 

facebookPluginAndroid мой класс, у CallBackManager:

this.callbackManager = CallbackManager.Factory.create();

И функция share() (которая запускается при нажатии кнопки складочный):

public void share(final FacebookPluginListener facebookPluginListener){ 
    shareDialog = new ShareDialog(context); 

    final ShareLinkContent content = new ShareLinkContent.Builder() 
      .setContentUrl(Uri.parse("https://www.facebook.com/SOME URL TO MY SITE")) 
      .build(); 
    if(shareDialog.canShow(content)){ 
     shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { 
      @Override 
      public void onSuccess(Sharer.Result result) { 
       System.out.println("share SHARED " + result.getPostId()); 
       if(result.getPostId()!=null) 
        facebookPluginListener.getFacebookShareListener().onShareSuccess(); 
      } 

      @Override 
      public void onCancel() { 
       System.out.println("share CANCEL"); 
      } 

      @Override 
      public void onError(FacebookException e) { 
       System.out.println("share ERROR"); 
      } 


     },121); 

     Gdx.app.postRunnable(new Runnable() { 
      @Override 
      public void run() { 
       shareDialog.show(content); 
      } 
     }); 
    } 
} 

Что я делаю не так? Что мне делать, чтобы правильно обмениваться контентом с FacebookSDK?

@EDIT: FacebookPluginAndroid.java:

public class FacebookPluginAndroid { 
private Activity context; 
private ShareDialog shareDialog; 
private CallbackManager callbackManager; 
private LikeDialog likeDialog; 

public FacebookPluginAndroid(Activity context) { 
    this.context = context; 
    this.callbackManager = CallbackManager.Factory.create(); 
} 

public void share(final FacebookPluginListener facebookPluginListener) { 


    shareDialog = new ShareDialog(context); 
    shareDialog.setShouldFailOnDataError(true); 
    final ShareLinkContent content = new ShareLinkContent.Builder() 
      .setContentUrl(Uri.parse("https://www.facebook.com/SOME URL")) 
      .build(); 
    if (shareDialog.canShow(content)) { 
     shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { 
      @Override 
      public void onSuccess(Sharer.Result result) { 
       System.out.println("share SHARED " + result.getPostId()); 
       if (result.getPostId() != null) 
        facebookPluginListener.getFacebookShareListener().onShareSuccess(); 
      } 

      @Override 
      public void onCancel() { 
       System.out.println("share CANCEL"); 
      } 

      @Override 
      public void onError(FacebookException e) { 
       System.out.println("share ERROR"); 
      } 


     }, 121); 

     Gdx.app.postRunnable(new Runnable() { 
      @Override 
      public void run() { 
       shareDialog.show(content); 
      } 
     }); 
    } 
} 

public void like(final FacebookPluginListener facebookPluginListener) { 
    likeDialog = new LikeDialog(context); 
    final LikeContent content = new LikeContent.Builder() 
      .setObjectId("https://www.facebook.com/SOMEURL") 
      .build(); 


    if (likeDialog.canShow(content)) { 
     likeDialog.registerCallback(callbackManager, new FacebookCallback<LikeDialog.Result>() { 
      @Override 
      public void onSuccess(LikeDialog.Result result) { 
       System.out.println("like success! android LIKE" + result.getData()); 

       if (result.getData().getBoolean("object_is_liked")) 
        facebookPluginListener.getFacebookLikeListener().onLikeSuccess(); 
      } 

      @Override 
      public void onCancel() { 
       System.out.println("like cancel! android LIKE"); 
      } 

      @Override 
      public void onError(FacebookException e) { 
       System.out.println("like error! android LIKE"); 
      } 


     }, 123); 

     Gdx.app.postRunnable(new Runnable() { 
      @Override 
      public void run() { 
       likeDialog.show(content); 
      } 
     }); 
    } 
} 

public CallbackManager getCallbackManager() { 
    return callbackManager; 
} 

}

+0

Не могли бы вы показать свой класс FacebookPluginAndroid? –

+0

@NikoYuwono отредактировал :) – taulus

ответ

1

POST_ID ответ доступна только если пользователь вошел в ваше приложение с помощью Facebook и предоставил publish_actions. Если присутствует, это идентификатор опубликованной публикации Open Graph.

U нужно добавить loginButton.setPublishPermissions(Arrays.asList("publish_actions"));

+0

, так что я не могу использовать «как» или «поделиться» без кнопки входа? – taulus

+1

@taulus как вы используете долю? если пользователь не вошел в систему? – PeDuCKA

+0

не всегда - открывается диалог совместного доступа, и если пользователь не зарегистрирован, он должен войти в это диалоговое окно, а затем поделиться. – taulus

0

Ok решение моей проблемы было: изменение facebook идентификатор в приложении. Этот идентификатор был изменен (!!!) после отправки на рассмотрение командой facebook, и я этого не заметил.

Что еще, если вы хотите поделиться чем-то, что вы должны использовать в приложении LoginButton (из facebook sdk), а затем ShareButton (всегда из facebook sdk). В кнопке входа вы должны отправить разрешение, указанное выше в PeDuCka. Если вы создадите ShareDialog с зарегистрированным менеджером обратного вызова, в методе onSuccess (результат ShareDialog.Result) result.getPostId() будет всегда равным null, пока вы не добавите на страницу конфигурации страницы в facebook разрешения publish_actions (и команда должна просмотреть ее [оставшееся 5 дней]), и вы должны проверить его с помощью кода PeDuCKA. На мой взгляд, sdk из facebook очень очень плохо документирован. Самое худшее, что я когда-либо видел (многие из противоречивых сведений).

Смежные вопросы