gpt4 book ai didi

android - 尝试显示 Facebook Android SDK 添加好友对话框时出错

转载 作者:行者123 更新时间:2023-11-30 04:00:36 24 4
gpt4 key购买 nike

我正在尝试通过 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

}
} );

有一个加载屏幕和一个对话框出现,但内容只是:

The redirect_uri URL protocol must be HTTP or HTTPS

通常在创建 facebook 对话框时不必指定 redirect_uri。即使我尝试手动指定一个,例如:

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

它返回相同的错误。

有人有什么想法吗?

最佳答案

Facebook 仅支持“对话”请求中的提要、Oauth 和 Apprequest 操作。对于这些请求,即使将 redirect_uri 指定为“fbconnect://success”,也不会给出“redirect_uri URL protocol should be http or 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");

开始代码更改--->> 如果操作是 friend ,您在这里用您的站点 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()) {

开始代码更改--->> 在 friend 对话期间我们不需要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;
}

开始代码更改--->> 在 friend 对话中,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;
}

关于android - 尝试显示 Facebook Android SDK 添加好友对话框时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com