登录facebook android时,授权对话框出现两次

时间:2014-02-07 10:11:16

标签: android facebook facebook-android-sdk

我是facebook开发的新手。我想loginfacebook并允许用户允许我的应用发布照片和内容。但是当用户login成功向他显示授权对话框两次时,我的代码就是

Session.openActiveSession(this, true, new Session.StatusCallback() {

            // callback when session changes state
            @Override
            public void call(Session session, SessionState state,
                    Exception exception) {

                if (session.isOpened()) {
                    Log.d("", "usman: session is opened");
                    // make request to the /me API

                    Request.executeMeRequestAsync(session,
                            new Request.GraphUserCallback() {

                                // callback after Graph API response with
                                // user
                                // object
                                @Override
                                public void onCompleted(GraphUser user,
                                        Response response) {
                                    Log.d("", "onCompleted called");
                                    if (user != null) {
                                        // TextView welcome = (TextView)
                                        // findViewById(R.id.welcome);
                                        Log.d(MyConstants.TAG,
                                                "facebook Hello : "
                                                        + user.getName() + "!");

                                        publishStory();
                                        //isShared = true;

                                    } else {
                                        Toast.makeText(
                                                getApplicationContext(),
                                                "Unable to Post,Try Again later",
                                                Toast.LENGTH_LONG).show();
                                    }
                                }
                            });

                } else {
                    Log.d("", "usman: Session is not open");
                }
            }
        });

private void publishStory() {
        Log.d("", "usman: in 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;
            }

            FileInputStream fis = null;
            try {
                fis = new FileInputStream(fileImage);
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            Bitmap bi = BitmapFactory.decodeStream(fis);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] data = baos.toByteArray();

            Bundle postParams = new Bundle();

            postParams.putString("name", "London For Less Postcard");
            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.putByteArray("picture", data);

            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("FB", "JSON error " + e.getMessage());
                    }
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        Toast.makeText(
                                SendPostCardActivity.this
                                        .getApplicationContext(),
                                error.getErrorMessage(), Toast.LENGTH_SHORT)
                                .show();
                        Log.d("", "usman: Error");
                    } else {
                        Toast.makeText(
                                SendPostCardActivity.this
                                        .getApplicationContext(),
                                "Posted on facebook wall successfully",
                                Toast.LENGTH_LONG).show();
                        Log.d("", "usman: Finish");
                        finish();
                    }
                }
            };

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

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

    }

2 个答案:

答案 0 :(得分:1)

对我来说,当我点击&#34;登录&#34;时,Facebook登录对话框也会显示两次。用Facebook按钮。

我刚刚更改了Facebook默认按钮并使用了普通按钮,有了Facebook按钮背景,现在登录页面只显示一次。

Facebook默认按钮显示正常和发布权限的登录页面。我不知道细节,但这对我有用。

答案 1 :(得分:0)

我解决了这个问题:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
    if (AccessToken.getCurrentAccessToken() != null ){
        if (!AccessToken.getCurrentAccessToken().getPermissions().contains("publish_actions")){
            LoginManager.getInstance().logInWithPublishPermissions(MainActivity.this, Arrays.asList("publish_actions"));
        }
    }
}