Android Facebook SDK - “与登录共享对话”

时间:2013-01-30 14:14:43

标签: android facebook

我正在尝试实施“分享对话”' Android中的Facebook按钮。它与示例不同,因为没有单独的登录按钮,因此流程都在“共享”按钮中。在我的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()打开共享对话框,似乎工作正常。这个问题在它发生之前就已经出现了:通常我会在StatusState.OPENING中报告它的StatusCallback,然后WebView给我"错误已经发生"而且我被困住了。我也没有调用onActivityResult()。

有什么想法吗?在此先感谢StackOverflow用户! :)

0 个答案:

没有答案