2011-03-20 41 views
0

所以我一直在嘗試,因爲很多天。找不到任何地方。Facebook朋友對話框返回「未知方法」錯誤

當我嘗試打電話給朋友與Facebook的Android SDK對話框中,它返回此錯誤:

API Error Code: 3
API Error Description: Unknown method
Error Message: This method isn't supported for this display type

我沒有找到文檔頁面,告訴朋友對話是不允許在觸摸設備上任何東西。我使用下面的代碼來做到這一點:

Bundle params = new Bundle(); 
params.putString("id", "brent"); 
Log.i("In on click", params.toString()); 
SampleDialogListener()); 
mFacebook.dialog(TestActivity.this, "friends", params, new SampleDialogListener()); 

如果它不允許有從應用程序中發送好友請求任何其他方式?

+0

你的意思是「未知方法」錯誤? – 2011-03-20 23:49:47

+0

是的。 「API錯誤說明:未知方法」 – 2011-03-21 00:19:05

回答

0

本教程具有facebook的API中使用對話框的示例:

+0

是的。我已經看到了。但它沒有說明任何關於朋友的請求。我試過使用這段代碼,但它給了我同樣的錯誤。 – 2011-03-21 18:56:26

+0

@ Vashishtha Jogi好吧,你上面提供的代碼實際上不會編譯,所以我無法將它與教程中的代碼進行比較。例如,'SampleDialogListener()')行似乎有語法錯誤。也許你可以編輯你的原始文章來提供你當前的代碼,並且還提供'SampleDialogListener()'的實現。 – 2011-03-21 19:31:17

+0

http://code.google.com/p/ubinfc/source/browse/#svn%2Ftrunk 我已將所有源代碼上傳到此處。 – 2011-03-22 05:44:36

6

潛在的問題是,Facebook的API是尚未準備好所有的顯示類型,並移動顯示屏無法顯示朋友對話框。你可以做的是改變Facebook的android庫:如果你在打開對話框的時候使用「彈出」顯示模式而不是「touch」和www.facebook.com而不是m.facebook.com,那麼一個合適的窗口會出現在Facebook圖書館標準WebView。

對於這一點,如下更改Facebook.java的對話框功能:

protected static String DIALOG_BASE_URL = "https://m.facebook.com/dialog/"; 
protected static String DIALOG_BASE_URL_FOR_MISSING_SCREENS = "https://www.facebook.com/dialog/"; 

public void dialog(Context context, String action, Bundle parameters, 
     final DialogListener listener) { 

    boolean missingScreen = action.contentEquals("friends") ? true : false; 

    String endpoint = missingScreen ? DIALOG_BASE_URL_FOR_MISSING_SCREENS : DIALOG_BASE_URL; 
    endpoint += action; 

    parameters.putString("display", missingScreen ? "popup" : "touch"); 
    parameters.putString("redirect_uri", REDIRECT_URI); 

    if (action.equals(LOGIN)) { 
     parameters.putString("type", "user_agent"); 
     parameters.putString("client_id", mAppId); 
    } else { 
     parameters.putString("app_id", mAppId); 
    } 

    if (isSessionValid()) { 
     parameters.putString(TOKEN, getAccessToken()); 
    } 
    String url = endpoint + "?" + Util.encodeUrl(parameters); 
    if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET) 
      != PackageManager.PERMISSION_GRANTED) { 
     Util.showAlert(context, "Error", 
       "Application requires permission to access the Internet"); 
    } else { 
     new FbDialog(context, url, listener).show(); 
    } 
} 

之後,你可能想要刪除從對話框中雙擊標題欄爲好。轉到FbDialog.java,並插入類似onPageFinished:

if (url.contains("friends?")) { 
    mTitle.setHeight(0); 
    mTitle.setVisibility(View.INVISIBLE); 
} 
+0

Tx爲信息對於我的iOS應用程序,我有一個pb,因爲我使用fb://方案進行身份驗證,而不是網頁登錄。當我爲朋友請求調用對話框時,對話框出現,但我有一個消息進行身份驗證...如何避免此身份驗證屏幕(因爲我已經過身份驗證,我有令牌)? – fvisticot 2011-12-14 23:29:47

2

Works。

class Facebook_friendsPatch extends Facebook { 
    protected static String DIALOG_BASE_URL = "https://m.facebook.com/dialog/"; 
    protected static String DIALOG_BASE_URL_FOR_MISSING_SCREENS = "https://www.facebook.com/dialog/"; 
    protected static final String LOGIN = "oauth"; 
    protected String appId ; 

    public Facebook_friendsPatch(String app) {  
     super(app) ; 
     appId = app ; 
    } 

    public void dialog(Context context, String action, Bundle parameters, 
         final DialogListener listener) { 
     // copy from above 
    } 
}