3

LibGDX And​​roid アプリケーションで FacebookSDK と何かを共有する際に問題があります。共有ボタンをクリックして何かを共有すると、返信が返されますSharer.Result null(投稿は共有されませんが、実際には共有されます!)。これは、共有をキャンセルした場合と同じ結果です。

これが私のコードです:

 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 でコンテンツを適切に共有するにはどうすればよいですか?

@編集: 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;
}

}

4

2 に答える 2

1

Post_id レスポンスは、ユーザーが Facebook を使用してアプリにログインし、publish_actions を許可している場合にのみ使用できます。存在する場合、これは公開された Open Graph ストーリーの ID です。

追加する必要がありますloginButton.setPublishPermissions(Arrays.asList("publish_actions"));

于 2015-12-21T06:56:14.183 に答える
0

私の問題の解決策は、アプリケーションでFacebook IDを変更することでした。この ID は、Facebook チームによってレビューに送信された後に (!!!) 変更されましたが、私はそれに気づきませんでした。

アプリケーション LoginButton (facebook sdk から) と ShareButton (常に facebook sdk から) で使用する必要があるものを共有したい場合はなおさらです。ログインボタンでは、PeDuCka が上で書いた許可を送信する必要があります。登録済みのコールバック マネージャーを使用して ShareDialog を作成する場合、メソッド onSuccess(ShareDialog.Result result) で、result.getPostId() は、Facebook の構成ページで publish_actions へのアクセス許可を追加するまで常に null になります (チームはそれを確認する必要があります [残り 5 日])。 PeDuCKA コードでテストする必要があります。私の意見では、facebook の sdk は非常に非常に悪いドキュメントです。私が今まで見た中で最悪です(矛盾した情報の多く)。

于 2015-12-29T19:09:54.493 に答える