4

私はすべてのインターネットを見て、fb sdk\api を使用して Facebook の壁に特定の写真のリンクを投稿する方法を見つけることができませんでした。

これは、使用する必要があるコードの一部であることを知っています。

Facebook facebookClient = new Facebook("fb_App_id");

Bundle parameters = new Bundle();
parameters.putString("message", "Test Photo");
parameters.putString("link", "https://www.google.com");
parameters.putString("picture", "link to some pictrue");
facebookClient.dialog(MainActivity.this, "stream.publish", parameters, new DialogListener() {

@Override
public void onFacebookError(FacebookError e) {
    // TODO Auto-generated method stub

}

@Override
public void onError(DialogError e) {
    // TODO Auto-generated method stub

}

@Override
public void onComplete(Bundle values) {
    // TODO Auto-generated method stub

}

@Override
public void onCancel() {
    // TODO Auto-generated method stub

}
});

このコードを使用しようとすると、「ソースが見つかりません」というエラーが表示されます。connect\verification のステップが抜けていると思います...

どうすればそれを機能させることができますか?

もう 1 つ: Google Play で共有している個人用アプリで FB SDK を使用しており、このアプリは無料ですが、広告が表示されている場合、アプリで FB SDK を使用することは合法ですか?

4

2 に答える 2

4

最後に、私はそれを行う方法を見つけました。

この 2 つを宣言する必要があります。

Facebook facebookClient;    
SharedPreferences mPrefs;

onCreate 関数では、facebookClient を facebook AppID で初期化します。

Facebook シェアを開始するクラスは Activity でなければなりません

アクティビティに追加した関数は 3 つあります。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebookClient.authorizeCallback(requestCode, resultCode, data);
}

public void loginToFacebook() {
    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);

    if (access_token != null) {
        facebookClient.setAccessToken(access_token);
    }

    if (expires != 0) {
        facebookClient.setAccessExpires(expires);
    }

    if (!facebookClient.isSessionValid()) {
        facebookClient.authorize(this, new String[] { "publish_stream" }, new DialogListener() {

            @Override
            public void onCancel() {
                // Function to handle cancel event
            }

            @Override
            public void onComplete(Bundle values) {
                // Function to handle complete event
                // Edit Preferences and update facebook acess_token
                SharedPreferences.Editor editor = mPrefs.edit();
                editor.putString("access_token", facebookClient.getAccessToken());
                editor.putLong("access_expires", facebookClient.getAccessExpires());
                editor.commit();

                postToWall();
            }

            @Override
            public void onError(DialogError error) {
                // Function to handle error

            }

            @Override
            public void onFacebookError(FacebookError fberror) {
                // Function to handle Facebook errors

            }

        });
    }
}

private void postToWall() {
    Bundle parameters = new Bundle();
    parameters.putString("name", "Battery Monitor");
    parameters.putString("link", "https://play.google.com/store/apps/details?id=com.ck.batterymonitor");
    parameters.putString("picture", "link to the picture");
    parameters.putString("display", "page");
    // parameters.putString("app_id", "228476323938322");

    facebookClient.dialog(MainActivity.this, "feed", parameters, new DialogListener() {

        @Override
        public void onFacebookError(FacebookError e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onError(DialogError e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onComplete(Bundle values) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onCancel() {
            // TODO Auto-generated method stub
        }
    });
}

そして最後に:

        ImageButton facebookButton = (ImageButton) findViewById(R.id.button_FacebookShare);
        facebookButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                loginToFacebook();

                if (facebookClient.isSessionValid()) {
                    postToWall();
                }
            }
        });

facebook への自動ログインを行い、facebook の共有\投稿ダイアログを表示します。コードはこのチュートリアルから取得されました

于 2012-06-09T07:47:10.503 に答える
1

あなたの問題は、非推奨になったstream.publishパスを使用していることだと思います。

注:現在、REST APIの廃止を進めているため、新しいアプリケーションを構築する場合は、この関数を使用しないでください。feed 代わりに、Graph APIを使用して、PostオブジェクトをUserオブジェクトの接続にPOSTします。

代わりにこれを行います:

facebookClient.dialog(MainActivity.this, "feed", parameters, new DialogListener() {
...

});
于 2012-06-08T13:41:57.853 に答える