发布到Facebook API

时间:2011-10-16 16:49:12

标签: android facebook api

我编写了一个应用程序,我需要Facebook共享(发布到墙上)。

应用程序接口工作:我得到一个对话框,我被问到是否要在Facebook上分享。在它应该进行身份验证之后,如果没有,它应该给我一个错误消息,但它没有 它只是给了我相同的对话框。

有人可以查看我的代码吗?

 public class ShareOnFacebook extends Activity{

    private static final String APP_ID = "138652356232418";
    private static final String[] PERMISSIONS = new String[] {"publish_stream"};

    private static final String TOKEN = "access_token";
        private static final String EXPIRES = "expires_in";
        private static final String KEY = "facebook-credentials";

        private Facebook facebook;
    private String messageToPost;

    public boolean saveCredentials(Facebook facebook) {
        Editor editor = 
        getApplicationContext().getSharedPreferences(KEY,Context.MODE_PRIVATE).edit();    
        editor.putString(TOKEN, facebook.getAccessToken());
        editor.putLong(EXPIRES, facebook.getAccessExpires());
        return editor.commit();
    }

    public boolean restoreCredentials(Facebook facebook) {
        SharedPreferences sharedPreferences =    
        getApplicationContext().getSharedPreferences(KEY, Context.MODE_PRIVATE);
        facebook.setAccessToken(sharedPreferences.getString(TOKEN, null));
        facebook.setAccessExpires(sharedPreferences.getLong(EXPIRES, 0));
        return facebook.isSessionValid();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        facebook = new Facebook(APP_ID);
        restoreCredentials(facebook);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.facebook_dialog);

        String facebookMessage = getIntent().getStringExtra("facebookMessage");
        if (facebookMessage == null){
            facebookMessage = "Wir sind auf dem Hamburger Weinachtsmarkt, kommt 
                doch einen Glühwein mit uns trinken!";
        }

        messageToPost = facebookMessage;  
        }

        public void doNotShare(View button){
        finish();
        }

        public void share(View button){
            if (! facebook.isSessionValid()) {
            loginAndPostToWall();
            }

            else {
                postToWall(messageToPost);
            }
        }

        public void loginAndPostToWall(){
             facebook.authorize(this,  PERMISSIONS, new LoginDialogListener());
        }

        public void postToWall(String message){
            Bundle parameters = new Bundle();
                parameters.putString("message", message);
                facebook.dialog(this, "stream.publish", parameters, new     
                    WallPostDialogListener());
        }

        class LoginDialogListener implements DialogListener {
             public void onComplete(Bundle values) {
                saveCredentials(facebook);
                if (messageToPost != null){
                postToWall(messageToPost);
        }
        }

        public void onFacebookError(FacebookError error) {
            showToast("Authentication with Facebook failed!");
            finish();
        }

        public void onError(DialogError error) {
            showToast("Authentication with Facebook failed!");
            finish();
        }

        public void onCancel() {
            showToast("Authentication with Facebook cancelled!");
            finish();
        }
    }

        class WallPostDialogListener implements DialogListener {
        public void onComplete(Bundle values) {
                    final String postId = values.getString("post_id");
                    if (postId != null) {
                    showToast("Message posted to your facebook wall!");
                } else {
                    showToast("Wall post cancelled!");
                }
                finish();
            }

        public void onFacebookError(FacebookError e) {
            showToast("Failed to post to wall!");
            e.printStackTrace();
            finish();
        }

        public void onError(DialogError e) {
            showToast("Failed to post to wall!");
            e.printStackTrace();
            finish();
        }

        public void onCancel() {
            showToast("Wall post cancelled!");
            finish();
        }
            }
        private void showToast(String message){
        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
        }
      }

我的主菜单上有一个按钮,意图是我粘贴的课程。在我的Facebook分享按钮上,我有一个意图:

Intent postOnFacebookWallIntent = new Intent(this, ShareOnFacebook.class);
            postOnFacebookWallIntent.putExtra("facebookMessage", "is integrating stuff again.");
            startActivity(postOnFacebookWallIntent);

好的,我会说得更清楚。

这个类是负责处理我所有Facebook API内容的类。当我将其与我的应用程序或任何应用程序集成时,它会向用户提供一个对话框,询问您是否要与Facebook共享。如果您按是,它应该通过Facebook进行身份验证并发布消息,或者如果失败,它应该给我一个错误消息,但它没有。它尝试进行身份验证,然后给我相同的对话框,它不应该。

现在我的问题是我做错了什么,为什么不做它应该做的事情。

1 个答案:

答案 0 :(得分:0)

当您向Facebook注册应用时,他们需要一个与您的应用相关联的密钥。这有点令人困惑,因为你在eclipse中运行你的应用程序时得到的密钥与你用来发布它的密钥不同,密钥生成就像它给你正确的结果,即使你输入了错误的密码,所以你必须要超级坚定 A)你正在生成正确的密钥(调试或真实) 和 B)您使用的是正确的密码和别名。

我的猜测是你的密钥不匹配,而且只是没有通过FB验证失败。

这个post非常详细地介绍了它。