1

我正在使用 android facebook api 在用户提要上发布。

登录成功,但功能 publishstory 不起作用。我有下面的代码。

private void publishStory() {

        Session session = Session.getActiveSession();

        if (session != null){

            // Check for publish permissions    
            List<String> permissions = session.getPermissions();
            if (!isSubsetOf(PERMISSIONS, permissions)) {
                pendingPublishReauthorization = true;
                Session.NewPermissionsRequest newPermissionsRequest = new Session
                        .NewPermissionsRequest(this, PERMISSIONS);
            session.requestNewPublishPermissions(newPermissionsRequest);
                return;
            }

            Bundle postParams = new Bundle();
            postParams.putString("name", "Facebook SDK for Android");
            postParams.putString("caption", "Build great social apps and get more installs.");
            postParams.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps.");
            postParams.putString("link", "https://developers.facebook.com/android");
            postParams.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png");

            Request.Callback callback= new Request.Callback() {
                public void onCompleted(Response response) {
                    JSONObject graphResponse = response
                                               .getGraphObject()
                                               .getInnerJSONObject();
                    String postId = null;
                    try {
                        postId = graphResponse.getString("id");
                    } catch (JSONException e) {
                        Log.i("error",
                            "JSON error "+ e.getMessage());
                    }
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        Toast.makeText(FacebookActivity.this.getApplicationContext(),
                             error.getErrorMessage(),
                             Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(FacebookActivity.this
                                 .getApplicationContext(), 
                                 postId,
                                 Toast.LENGTH_LONG).show();
                    }
                }
            };

            Request request = new Request(session, "me/feed", postParams, 
                                  HttpMethod.POST, callback);

            RequestAsyncTask task = new RequestAsyncTask(request);
            task.execute();
        }

    }

问题是它执行到行

session.requestNewPublishPermissions(newPermissionsRequest);
                return;
            }

然后在返回时退出函数而不显示任何弹出窗口。有任何想法吗?

4

3 回答 3

1

参考这段代码->

FbShare 代码模式要点

于 2013-05-10T20:03:58.713 回答
0

正如您所展示的,requestNewPublishPermissions()当在没有必要权限的情况下找到访问令牌时,代码调用。但是为了完成请求后的动作,你必须定义Session.StatusCallback.

private static Session.StatusCallback sessionCallback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        Log.i(TAG, "callback");
        if (exception == null) {
            if (pendingPublishAction && state.isOpened()) {
                pendingPublishAction = false;
                //do your post action;
            }
        }
        else{
            //handle exception
        }
    }
};

但是,从您所说的来看,似乎甚至没有显示新权限的对话框。你是onActivityResult这样实现的吗?

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session session = Session.getActiveSession();
    if (session != null) {
        session.onActivityResult(this, requestCode, resultCode, data);
    }
}

如果你这样做了,那么在身份验证阶段肯定有其他类型的错误,在这种情况下 logcat 应该显示一些东西。

于 2013-05-05T14:22:34.193 回答
0

Return 必须仅针对我在造成问题的正常活动中执行的片段活动调用。

于 2013-06-29T04:40:34.700 回答