2012-06-08 42 views
4

我看所有的互联网,无法找到如何使用fb sdk \ api在Facebook墙上张贴特定图片的链接。如何使用FB API从Android应用程序发布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 

} 
}); 

当我尝试使用此代码我得到“源未找到”的错误。 我认为我错过了连接\验证步骤...

我该如何让它工作?另一件事:如果我在我的个人应用程序中使用FB SDK,并且该应用程序是免费的,但其上有广告,在我的应用程序中使用FB SDK是否合法?

+0

你注册你的应用程序在Facebook上,并得到应用程序ID,如果是的话,你可以使用它。如果没有,请参阅[this](http://developers.facebook.com/docs/mobile/android/build/) – Siddhesh

+0

而不是发送三个字符串,您可以将所有内容以格式发送到一个字符串中 – Siddhesh

+0

可能的[Post message to Facebook的墙从android fb sdk总是错误](http://facebook.stackoverflow.com/questions/3726429/post-message-to-facebook-wall-from-android-fb-sdk-always-error) – Igy

回答

4

终于让我找到如何做到这一点。

需要声明此二:

Facebook facebookClient;  
SharedPreferences mPrefs; 

在OnCreate函数初始化我用facebookClient facebook的的AppID。

是午餐Facebook的份额必须是活动类

有,我加入到活动三个功能:

@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对话框。 该代码是从这tutorial

+0

如果没有自动登录会怎么样?它是否要求用户登录然后发布?未登录的回退方法是什么? – Si8

+0

是的,它要求用户登录 –

+0

不幸的是,它现在是**弃用**。 – Mike

1

我猜测,你的问题是,您使用的得到弃用stream.publish路径:

请注意:我们在自嘲的REST API的过程,因此,如果 你正在建设一个新的应用程序,你不应该使用这个功能。 而是使用图形API和张贴张贴对象用户对象

,而不是做这个的feed 连接:

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

}); 
+0

我需要一些额外的自动化吗?或者是其他东西? 或者我可以只使用对话框功能? –

+0

我得到一个FB窗口,其中出现了“未找到请求的页面”。 –

+0

哦,该死的。我的不好,它应该是'feed'而不是'me/feed'。我会在我的回答中修复它 –

相关问题