4

各位程序员,您好,我在使用新的 Facebook SDK 时遇到了困难,

场景是:

我正在使用片段,所以我按照以下步骤操作

为什么 Android Facebook 界面不能与 Fragments 一起使用?

现在我得到了 oncomplete 和令牌 ID

现在我想在墙上发帖所以我创建了这个功能

private void publishStory(Session session) {

    if (session != null){

        // Check for publish permissions    
        session.addCallback(new StatusCallback() {

            @Override
            public void call(Session session, SessionState state,
                Exception exception) {
                List<String> PERMISSIONS = Arrays
                    .asList("publish_actions");
                session
                    .requestNewPublishPermissions(new Session.NewPermissionsRequest(
                        getActivity(), PERMISSIONS));

                Request request = Request.newStatusUpdateRequest(
                    session, "Temple Hello Word Sample",
                    new Request.Callback() {
                        @Override
                        public void onCompleted(Response response) {
                            Log.i("fb:done = ", response.getGraphObject() + ","
                                + response.getError());
                        }
                    });
                request.executeAsync();

            }

        });

并将声明放在 Oncomplete 上

    public void call(final Session session, SessionState state, Exception exception) {
            if (session.isOpened()) {
                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {



                                                        publishStory(session);
                        }
                        else
                        {
                            Log.v("FACEBOOK ", "NO ACCESS");
                        }
                    }
                });
            }

我的问题出在这行代码上session.addCallback(new StatusCallback() {,它跳过了下一步,从而结束了该功能而没有在我的墙上张贴。

我很确定会话处于活动状态,因为我有 applicationID 和访问令牌..

有什么帮助吗?

谢谢

编辑

我根据下面的答案使用此代码并添加了新权限

private void publishStoryTEST(final Session session)
{       

    if (session != null) 
    {
        Bundle postParams = new Bundle();
        postParams.putString("message", "TEST");
        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("JSON", "JSON error " + e.getMessage());
                }
                FacebookRequestError error = response.getError();
                Log.e("post response", response.toString());
                if (error != null) 
                {
                } 
                else 
                {
                }

            }
        };
        List<String> PERMISSIONS = Arrays
                .asList("publish_actions");
        session.requestNewPublishPermissions(new Session.NewPermissionsRequest(getActivity(), PERMISSIONS));    
        Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback);

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

    }
}

但我仍然收到一个错误说

The user hasn't authorized the application to perform this action

为什么我仍然收到该错误?权限从来没有调用过吗?

4

3 回答 3

1

这个问题很常见,我正在与您分享我当前在我的应用程序中使用的发布方法的工作源代码。

private void publishStory(String status)
{       
Session session = Session.getActiveSession();

if (session != null) 
{
Bundle postParams = new Bundle();
postParams.putString("message", status);
Request.Callback callback = new Request.Callback() 
    {
    public void onMalformedURLException(MalformedURLException e)
          {

          } 
    public void onIOException(IOException e) 
          {

          } 
    public void onFileNotFoundException(FileNotFoundExceptione) 
          {

          } 
    public void onFacebookError(FacebookError e) 
          {

          }

public void onCompleted(Response response) 
{
    JSONObject graphResponse = response.getGraphObject().getInnerJSONObject();
    String postId = null;
    try 
    {
        postId = graphResponse.getString("id");
    } 
    catch (JSONException e) 
    {
        Log.i("JSON", "JSON error " + e.getMessage());
    }
    FacebookRequestError error = response.getError();
    Log.e("post response", response.toString());
    if (error != null) 
    {
    } 
    else 
    {
    }
}
};

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


我希望这能解决你的问题。

编辑:
请参阅以下链接,了解设置具有适当权限和发布功能的 Facebook SDK 3.0 的详细过程。
登录失败后发布到 Facebook Android
http://www.kpbird.com/2013/03/android-login-using-facebook-sdk-30.html

于 2013-09-09T06:44:07.810 回答
1

// 试试下面的代码

private void postData() {
        lnrPbr.setVisibility(View.VISIBLE);
        isSharingData = true;

        Session session = Session.getActiveSession();
        if (session != null) {

            Bundle postParams = new Bundle();
            postParams.putString("name", getIntent().getStringExtra("IN_SHARE_CAPTION") == null ? "" : getIntent().getStringExtra("IN_SHARE_CAPTION"));
            postParams.putString("caption", getIntent().getStringExtra("IN_SHARE_CAPTION") == null ? "" : getIntent().getStringExtra("IN_SHARE_CAPTION"));
            postParams.putString("description", getIntent().getStringExtra("IN_SHARE_DESCRIPTION") == null ? "" : getIntent().getStringExtra("IN_SHARE_DESCRIPTION"));
            postParams.putString("link", getIntent().getStringExtra("IN_SHARE_SHARELINK") == null ? "" : getIntent().getStringExtra("IN_SHARE_SHARELINK"));
            postParams.putString("picture", getIntent().getStringExtra("IN_SHARE_THUMB") == null ? "" : getIntent().getStringExtra("IN_SHARE_THUMB"));
            postParams.putString("message", getIntent().getStringExtra("IN_SHARE_MESSAGE") == null ? "" : getIntent().getStringExtra("IN_SHARE_MESSAGE"));

            Request.Callback callback = new Request.Callback() {

                public void onCompleted(Response response) {
                    isSharingData = false;
                    lnrPbr.setVisibility(View.GONE);
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        IjoomerUtilities.getCustomOkDialog(getString(R.string.facebook_share_title), error.getErrorMessage(), getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {

                            @Override
                            public void NeutralMethod() {
                                finish();
                            }
                        });
                    } else {
                        IjoomerUtilities.getCustomOkDialog(getString(R.string.facebook_share_title), getString(R.string.facebook_share_success), getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {

                            @Override
                            public void NeutralMethod() {
                                finish();
                            }
                        });
                    }
                }
            };

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

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

    }
于 2013-09-09T07:22:36.450 回答
0

参考这个教程..

http://www.androidhive.info/2012/03/android-facebook-connect-tutorial/

public void postToWall() {
    // post on user's wall.
    facebook.dialog(this, "feed", new DialogListener() {

        @Override
        public void onFacebookError(FacebookError e) {
        }

        @Override
        public void onError(DialogError e) {
        }

        @Override
        public void onComplete(Bundle values) {
        }

        @Override
        public void onCancel() {
        }
    });

}
于 2013-09-09T06:35:59.977 回答