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

}
});

当我尝试使用此代码时,出现“找不到源”错误。我认为我错过了连接\验证步骤......

我怎样才能让它工作?

另一件事:如果我在我在 Google Play 上共享的个人应用程序中使用 FB SDK,并且该应用程序是免费的但上面有广告,那么在我的应用程序中使用 FB SDK 是否合法?

4

2 回答 2

4

最后我找到了怎么做。

您需要声明这两个:

Facebook facebookClient;    
SharedPreferences mPrefs;

在 onCreate 函数中,我使用 facebook AppID 初始化 facebookClient。

午餐 facebook 分享的课程必须是 Activity

我在活动中添加了三个功能:

@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 share\post 对话框。代码取自本教程

于 2012-06-09T07:47:10.503 回答
1

我猜您的问题是您正在使用已弃用的stream.publish路径:

请注意:我们正在弃用 REST API,因此如果您正在构建新应用程序,则不应使用此功能。而是使用 Graph API 并将 Post 对象发布到feed User 对象的连接

而是这样做:

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

});
于 2012-06-08T13:41:57.853 回答