我正在尝试在 Android 中实现“共享对话框”Facebook 按钮。它与示例不同,因为没有单独的登录按钮,所以流程都在 Share 按钮内。在我的 HTC Desire 上它可以工作:用户单击按钮。如果他们未登录,Facebook 原生应用程序将启动,并提示他们授权应用程序用于基本和发布范围(按照文档要求一个接一个),然后他们可以使用原生共享对话框发布到 Facebook。在其他各种手机上,我只是臭名昭著:
“发生了一个错误。请稍后重试。”
我已经在 StackOverflow 上阅读了几个线程,现在尝试了很多东西,但我已经没有想法了,这需要工作。真正让我感到惊讶的是,在线或任何地方都没有演示或示例代码说明如何做到这一点——这肯定是 90% 的开发人员想要使用 Android Facebook SDK 的目的吗?大多数应用程序都没有单独的 Facebook 登录按钮,这样共享才有效,是吗?
这是我的代码。任何帮助都会非常有用!
在 Application.onCreate() 中:
String facebook_id = getApplicationContext().getString(R.string.facebook_id);
facebookSession = Session.getActiveSession();
Log.d("Application", "** facebookSession = "+facebookSession);
if (facebookSession == null || facebookSession.getState().isClosed()) {
facebookSession = new Session.Builder(this).setApplicationId(facebook_id).build();
Log.d("Application", "** Built new session: "+facebookSession);
Session.setActiveSession(facebookSession);
}
在我的 Fragment 的 Facebook 分享按钮监听器中:
protected void tryFacebookShare() {
StatusCallback callback = new StatusCallback() {
public void call(Session session, SessionState state, Exception exception) {
if (exception != null) {
Log.d("facebook", "Error in Facebook login: "+exception.getMessage());
Application.refreshSession();
}
Log.d("facebook", "Session StatusCallback returned - state: "+state.toString()+" session: "+session.toString()+" token: "+session.getAccessToken());
if(state == SessionState.OPENED || state == SessionState.OPENED_TOKEN_UPDATED) {
if(session.getPermissions().contains("publish_actions")) {
Log.d("facebook", "We have permissions, publishing");
PollFragment.this.publishPollStory();
} else {
Log.d("facebook", "Requesting publish permissions");
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(PollFragment.this, Arrays.asList("publish_actions"));
session.requestNewPublishPermissions(newPermissionsRequest);
}
}
}
};
Session session = Application.getFacebookSession();
if(!session.isOpened() && !session.isClosed()) {
Log.d("facebook", "Opening new session");
session.openForRead(new Session.OpenRequest(getActivity()).setPermissions(Arrays.asList("basic_info")).setCallback(callback));
} else {
Log.d("facebook", "Opening active session...");
Session.openActiveSession(getActivity(), this, true, callback);
}
}
publishPollStory() 打开共享对话框,似乎工作正常。问题发生在它走到这一步之前:通常我会在 StatusCallback 报告它在 SessionState.OPENING 中,然后 WebView 给我“发生错误”并且我被卡住了。我也没有调用 onActivityResult() 。
有任何想法吗?在此先感谢好心的 StackOverflow 用户!:)