![](/img/trans.png)
[英]Getting 'BadTokenException: Unable to add window' when trying to show Facebook dialog - Android
[英]Error when trying to show Facebook Android SDK Add Friend Dialog
我正在尝试通过fb 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
通常,在创建Facebook对话框时不必指定redirect_uri。 即使我尝试手动指定一个,例如:
parameters.putString("redirect_uri", "http://www.facebook.com");
它返回相同的错误。
有任何想法吗?
Facebook在“对话”请求中仅支持feed,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");
更改起始代码--- >>如果操作是朋友,则在这里使用您的SITE 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中有一个Webview客户端,它处理来自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是您的SITE 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;
}
我在developers.facebook.com上提交了错误报告,并得到以下答案:
我们的SDK不支持添加朋友。 请参阅此处>(https://developers.facebook.com/docs/reference/androidsdk/)了解我们支持的文档。
如果您仍然遇到问题,请随时在我们的社区网站>(http://facebook.stackoverflow.com/)上发布并标记为“ android”。
谢谢,杰西
我不明白,因为有一个添加朋友的对话框,现在不支持
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.