2012-09-23 24 views
1

我試圖通過fb sdk顯示添加朋友對話框。嘗試顯示Facebook Android SDK添加朋友對話框時出錯

   Bundle parameters = new Bundle(); 
       parameters.putString("id", i.getUid()); 
       FacebookSession.getSession().dialog(getSherlockActivity(), "friends", parameters, 
          new Facebook.DialogListener() 
          { 
          public void onFacebookError(FacebookError e) { } 
          public void onError(DialogError e) { } 
          public void onCancel() { } 
          @Override 
          public void onComplete(Bundle values) { 
           // TODO Auto-generated method stub 

          } 
          }); 

有一個加載屏幕,並顯示一個對話框,但內容僅僅是:

的REDIRECT_URI URL協議必須是HTTP或HTTPS

一般一個REDIRECT_URI具有不在創建Facebook對話框時指定。即使我嘗試手動指定一個,例如:

parameters.putString("redirect_uri", "http://www.facebook.com"); 

它會返回相同的錯誤。

任何任何想法?

回答

0

我申請在developers.facebook.com bug報告,得到了如下回答:

我們的SDK不支持添加好友。請參閱此處>(https://developers.facebook.com/docs/reference/androidsdk/)獲取有關>支持的文檔。

如果您仍然遇到問題,請隨時在我們的社區網站(http://facebook.stackoverflow.com/)上發帖,並用「android」標記。

感謝, 傑西

我不理解,因爲有添加好友對話框,現在它不支持

1

的Facebook只支持飼料,在「對話框的Oauth和Apprequest行動「請求。對於這些請求,即使redirect_uri被指定爲「fbconnect:// success」,它也不會給出錯誤「redirect_uri URL協議應該是http或https」。不幸的是,當我們發出朋友對話時,facebook除了將redirect_uri設爲http/https,並且redirect_uri應該在APP設置中的「SITE URL」參數中定義域名。

無論如何,我們通過覆蓋facebook SDK中的redirect_uri來解決這個問題。在facebook.java我們做了以下更改對話框方法:

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

String endpoint = DIALOG_BASE_URL + action; 
parameters.putString("display", "touch"); 

啓動代碼的變化--- >>在這裏你將覆蓋與您的網站URL的REDIRECT_URI如果動作是朋友

if(action.contentEquals("friends")) 
{ 
    parameters.putString("redirect_uri", "http://www.yourdomain.com"); 
} 
else 
{ 
    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()) { 

啓動代碼的變化--- >>我們並不需要一個朋友對話期間ACCESS_TOKEN

if(!action.contentEquals("friends")) 
     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有一個網頁視圖客戶端,從Facebook進程的返回值,你必須進行以下更改FbDialog。Java的:

private class FbWebViewClient extends WebViewClient { 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    Util.logd("Facebook-WebView", "Redirect URL: " + url); 
    if (url.startsWith(Facebook.REDIRECT_URI)) { 
     Bundle values = Util.parseUrl(url); 

     String error = values.getString("error"); 
     if (error == null) { 
      error = values.getString("error_type"); 
      Util.logd("Facebook-WebViewError", "error type: " + error); 
     } 
     else 
       Util.logd("Facebook-WebViewError", "error: " + error); 
     if (error == null) { 
      mListener.onComplete(values); 
     } else if (error.equals("access_denied") || 
        error.equals("OAuthAccessDeniedException")) { 
      mListener.onCancel(); 
     } else { 
      mListener.onFacebookError(new FacebookError(error)); 
     } 

     FbDialog.this.dismiss(); 
     return true; 
    } else if (url.startsWith(Facebook.CANCEL_URI)) { 
     mListener.onCancel(); 
     FbDialog.this.dismiss(); 
     return true; 
    } else if (url.contains(DISPLAY_STRING)) { 
     return false; 
    } 

啓動代碼的變化--- >>在一個朋友的對話,REDIRECT_URI是你的網站URL,因此在URL變量和過程的成功和失敗相應

else if (url.startsWith("http://www.yourdomain.com")) { 
     Bundle values = Util.parseUrl(url); 

     String error = values.getString("error"); 
     if (error == null) { 
      error = values.getString("error_type"); 
      Util.logd("Facebook-WebViewError", "error type: " + error); 
     } 
     else 
      Util.logd("Facebook-WebViewError", "error: " + error); 
     if (error == null) { 
      mListener.onComplete(values); 
     } else if (error.equals("access_denied") || 
        error.equals("OAuthAccessDeniedException")) { 
      mListener.onCancel(); 
     } else { 
      mListener.onFacebookError(new FacebookError(error)); 
     } 

     FbDialog.this.dismiss(); 
     return true; 
    } 
    // launch non-dialog URLs in a full browser 
    // getContext().startActivity(
    //   new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 

結束檢查該代碼更改

return false; 
} 
相關問題