2012-06-08 56 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'。我會在我的回答中修復它 –

相關問題