0

私はdeveloper.facebook.comで提供されている基本的なFacebookライブラリを使用してFacebookに投稿するためのサンプルを作成しましたが、SSOで問題なく動作します。

    btnPostOnFb.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        {
                facebook.authorize(FBIntegrationSampleActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"}, new DialogListener() {
                    @Override
                    public void onComplete(Bundle values) {
                        if(values!=null && values.containsKey("access_token")){
                            postOnWall("NEW POST from" +count+"Android -Anuj");
                            Log.e("post on wall", "WALLPOST");
                            Toast.makeText(getApplicationContext(), "SUCCESSFULLY POSTED MSG ON WALL", Toast.LENGTH_SHORT).show();
                        }else if(values!=null)
                            Log.e("LOGINE SUCCESS", "LOGIN SUCCESS");
                            Toast.makeText(getApplicationContext(), "SUCCESSFULLY LOGGED IN", Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onFacebookError(FacebookError error) {
                        Log.e("onFBERROR", "ONFBERROR");
                    }
                    @Override
                    public void onError(DialogError e) {
                        Log.e("on DESI ERROR", "ON_ERROR");
                    }
                    @Override
                    public void onCancel() {
                        Log.e("onCANCEL", "ONCANCEL");
                    }
                });
            }
        }
    });

Facebookのウォールに正常に投稿されたのは、私が欲しいのは、ユーザーが正常にサインインしたことをユーザーに示す必要があり、その後にメッセージが投稿されることです。

私が直面している問題は、onComplete(Bundle values)ログインと投稿の両方でメソッドが呼び出されることです。両方を区別するにはどうすればよいkeyですか。バンドル値に違いを見つけるのに役立つものはありますか?

どんな提案でも大歓迎です。

4

2 に答える 2

1

問題は、認証と投稿に使用していることです。このようにする必要はありません:

認証用

facebook.authorize(a, PERMISSIONS,-1,new LoginListener());

そして投稿のために:

1)ダイアログなしfacebook.request(parameters)

2)ダイアログ付き

facebook.dialog(this,"stream.publish",parameters,new TestUiServerListener());


    public class TestUiServerListener implements DialogListener {
    public void onComplete(Bundle values) {
        final String postId = values.getString("post_id");
        if (postId != null) {
            new AsyncFacebookRunner(ZValues.authenticatedFacebook).request(postId,new TestPostRequestListener());
        } else {
            Post_Message_Title.this.runOnUiThread(new Runnable() {
                public void run() {
                }
            });
        }
    }

    public void onCancel() {
    }

    public void onError(DialogError e) {
        e.printStackTrace();
    }

    public void onFacebookError(FacebookError e) {
        e.printStackTrace();
    }
}

public class TestPostRequestListener implements RequestListener {
    public void onComplete(final String response, final Object state) {
        try {
            JSONObject json = Util.parseJson(response);
            String postId = json.getString("id");
            this.runOnUiThread(new Runnable() {
                public void run() { 
                        successLoginShowDialog();  // Dialog after Login succeeds
                }
            });
        } catch (Throwable e) {
        }
    }

    public void onFacebookError(FacebookError e, final Object state) {
        e.printStackTrace();
    }

    public void onFileNotFoundException(FileNotFoundException e,
            final Object state) {
        e.printStackTrace();
    }

    public void onIOException(IOException e, final Object state) {
        e.printStackTrace();
    }

    public void onMalformedURLException(MalformedURLException e,
            final Object state) {
        e.printStackTrace();
    }
}

メソッドsuccessLoginShowDialog()を作成して、必要なものを表示するだけです。

Postが成功した場合、以下のTestPostRequestListenerでスレッドが呼び出されるので、このスレッドのすべてのものを実行します。

this.runOnUiThread(new Runnable() {
        public void run() { 
            successLoginShowDialog();  // Dialog after Login succeeds
        }
});
于 2012-06-19T12:01:34.760 に答える
0

postOnWall()に、その応答を取得できます。

public void postToWall(String message) {
        Bundle parameters = new Bundle();
        parameters.putString("message", message);
        parameters.putString("description", "topic share");
        try {
            fbObj.request("me");
            String response = fbObj.request("me/feed", parameters, "POST");
            Log.d("Tests", "got response: " + response);
            if (response == null || response.equals("")
                    || response.equals("false")) {
                // showToast("Blank response.");
                Toast.makeText(context, "blank response", Toast.LENGTH_SHORT)
                        .show();
            } else {
                // showToast("Message posted to your facebook wall!");
                Toast.makeText(context,
                        "Message posted to your facebook wall!",
                        Toast.LENGTH_SHORT).show();
            }

        } catch (Exception e) {
            // showToast("Failed to post to wall!");
            e.printStackTrace();

        }
    }
于 2012-06-19T11:45:26.883 に答える