1

Android に「共有ダイアログ」の Facebook ボタンを実装しようとしています。例とは異なり、別のログイン ボタンがないため、フローはすべて [共有] ボタン内にあります。私のHTC Desireでは機能します。ユーザーはボタンをクリックします。ログインしていない場合、Facebook のネイティブ アプリが起動し、基本スコープと公開スコープに対してアプリを承認するよう求めるプロンプトが表示され (ドキュメントの要求に従って次々に)、ネイティブの共有ダイアログを使用して Facebook に投稿できます。他のさまざまな電話では、悪名高いものを取得します。

「エラーが発生しました。後でもう一度やり直してください。」

私は StackOverflow でこれに関するいくつかのスレッドを読み、非常に多くのことを試しましたが、アイデアが不足しており、これを機能させる必要があります。私が本当に驚いたのは、これを行う方法に関するデモやサンプル コードがオンラインやどこにもないことです。開発者の 90% が Android Facebook SDK を使用したいと考えているのは確かですか? ほとんどのアプリには、共有が機能するように、個別の Facebook ログイン ボタンはありませんよね?

これが私のコードです。どんな助けでも本当に役に立ちます!

Application.onCreate() で:

    String facebook_id = getApplicationContext().getString(R.string.facebook_id);
    facebookSession = Session.getActiveSession();
    Log.d("Application", "** facebookSession = "+facebookSession);

    if (facebookSession == null || facebookSession.getState().isClosed()) {
        facebookSession = new Session.Builder(this).setApplicationId(facebook_id).build();
        Log.d("Application", "** Built new session: "+facebookSession);
        Session.setActiveSession(facebookSession);
    }

私の Fragment の Facebook 共有ボタン リスナーでは:

protected void tryFacebookShare() {

    StatusCallback callback = new StatusCallback() {
        public void call(Session session, SessionState state, Exception exception) {
            if (exception != null) {
                Log.d("facebook", "Error in Facebook login: "+exception.getMessage());
                Application.refreshSession();
            }
            Log.d("facebook", "Session StatusCallback returned - state: "+state.toString()+" session: "+session.toString()+" token: "+session.getAccessToken());

            if(state == SessionState.OPENED || state == SessionState.OPENED_TOKEN_UPDATED) {
                if(session.getPermissions().contains("publish_actions")) {
                    Log.d("facebook", "We have permissions, publishing");
                    PollFragment.this.publishPollStory();
                } else {
                    Log.d("facebook", "Requesting publish permissions");
                    Session.NewPermissionsRequest newPermissionsRequest = new Session
                            .NewPermissionsRequest(PollFragment.this, Arrays.asList("publish_actions"));
                    session.requestNewPublishPermissions(newPermissionsRequest);
                }
            }
        }
    };

    Session session = Application.getFacebookSession();
    if(!session.isOpened() && !session.isClosed()) {
        Log.d("facebook", "Opening new session");
        session.openForRead(new Session.OpenRequest(getActivity()).setPermissions(Arrays.asList("basic_info")).setCallback(callback));
    } else {
        Log.d("facebook", "Opening active session...");
        Session.openActiveSession(getActivity(), this, true, callback);
    }
    }

publishPollStory() は共有ダイアログを開き、正常に動作しているようです。問題は、ここまで到達する前に発生します。通常、StatusCallback が SessionState.OPENING にあると報告するまで取得すると、WebView が「エラーが発生しました」と表示され、行き詰まります。onActivityResult() も呼び出されません。

何か案は?親切な StackOverflow ユーザーの皆様、よろしくお願いします。:)

4

0 に答える 0