0

わかりましたので、ユーザーのウォールに新しい投稿を作成したいと思います。このリンクでdevelopers.facebookが提供するコードに従いましたhttps://developers.facebook.com/docs/howtos/androidsdk/3.0/publish-to-feed/

ストーリーの公開メソッドで、ログを追加して、プログラムがコード行を通過したかどうかを確認します。

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

if (session != null){

    Log.d("INFO","session is not NULL");

    // Check for publish permissions    
    List<String> permissions = session.getPermissions();
    if (!isSubsetOf(PERMISSIONS, permissions)) {

         Log.d("INFO","setting permission");

        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");

    Log.d("INFO","finish construct message");

    Request.Callback callback= new Request.Callback() {
        public void onCompleted(Response response) {

            Log.d("INFO","on request complete!");

            JSONObject graphResponse = response
                                       .getGraphObject()
                                       .getInnerJSONObject();
            String postId = null;
            try {
                postId = graphResponse.getString("id");
            } catch (JSONException e) {
                Log.i(TAG,
                    "JSON error "+ e.getMessage());
            }
            FacebookRequestError error = response.getError();
            if (error != null) {
                Toast.makeText(getActivity()
                     .getApplicationContext(),
                     error.getErrorMessage(),
                     Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getActivity()
                         .getApplicationContext(), 
                         postId,
                         Toast.LENGTH_LONG).show();
            }
        }
    };

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

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

}

問題は、上記のメソッドを実行すると、認証公開許可ウィンドウがポップアップし、それを許可するまでプログラムが正常に実行され、画面が再び黒い画面に続き、不確定なプログレスバーが表示され、ウィンドウが自動的に閉じることです.

実際、logcat から、「on request complete」行を通過しないと結論付けることができます。

なぜこれが起こるのですか?どんな手掛かり?

ありがとう!

4

2 に答える 2

2

そうそう、私は現在この解決策に従っています更新-Android Facebook api 3.0エラー:null呼び出しパッケージでLoginActivityを呼び出すことはできません

あなたが言ったように、私はこのようにonActivityResultを追加しました

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

そしてそれは動作します!ダイアログクラスに行を配置しましたが

public void createFacebookConnection() {
        Session session = new Session(MapScreen.this);
        Session.setActiveSession(session);

        Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

        Session.StatusCallback statusCallback = new Session.StatusCallback() {
            @Override
            public void call(Session session, SessionState state, Exception exception) {
                String message = "Facebook session status changed - " + session.getState() + " - Exception: " + exception;
                Log.w("Facebook test", message);

                if (session.isOpened() || session.getPermissions().contains("publish_actions")) {
                    publishToWall();
                } else if (session.isOpened()) {
                    OpenRequest open = new OpenRequest(MapScreen.this).setCallback(this);
                    List<String> permission = new ArrayList<String>();
                    permission.add("publish_actions");
                    open.setPermissions(permission);
                    Log.w("Facebook test", "Open for publish");
                    session.openForPublish(open);
                }
            }
        };

        if (!session.isOpened() && !session.isClosed() && session.getState() != SessionState.OPENING) {
            session.openForRead(new Session.OpenRequest(MapScreen.this).setCallback(statusCallback));
        } else {
            Log.w("Facebook test", "Open active session");
            Session.openActiveSession(MapScreen.this, true, statusCallback);
        }
    }

    void publishToWall() {
        Session session = Session.getActiveSession();

        Bundle postParams = new Bundle();
        postParams.putString("name", "Merauke Android");
        postParams.putString("caption", hotelName);
        postParams.putString("description", hotelName+" is a luxury hotel which is located in the city of Bandung.");
        postParams.putString("link", "https://developers.facebook.com/android");
        postParams.putString("picture", "http://www.jejaringhotel.com/android/hotelimages/hotel-3.jpg");
        Log.i("DIALOG","feed set");

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

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

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

アドバイスありがとうございます明李!ありがとう!

于 2013-03-21T15:53:33.317 に答える
0

ここに完全なガイドがあります: https://developers.facebook.com/docs/howtos/androidsdk/3.0/publish-to-feed/

または私の新しいライブラリを使用してください:

https://github.com/m3n0R/EasyFacebookConnect

于 2013-05-06T13:39:49.763 に答える