Facebook SDK: состояние сеанса не открыто при создании WebDialog.FeedDialogBuilder

Я столкнулся с такой странной ошибкой при реализации информации об обмене в Facebook. Я сделал все этапы так, как они описаны в учебнике Facebook руководстве Facebook - поделитесь информацией

но пока я пытался создать пример WebDialog.feedDialog

    private void publishFeedDialog() {
        Bundle params = new Bundle();
        params.putString("name", getString(R.string.name_fb));
        params.putString("description", getString(R.string.description_fb));
        params.putString("link", getString(R.string.share_link_fb));
        params.putString("picture", getString(R.string.pictute_url_fb));
        
        Session session = Session.getActiveSession();
        
        Log.i(TAG, "session = " + session + " isOpen = " + session.isOpened() + " isClosed = " + session.isClosed());
        
        WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(this, Session.getActiveSession(), params))
        		.setOnCompleteListener(new OnCompleteListener() {

                @Override
                public void onComplete(Bundle values, FacebookException error) {
                    if (error == null) {
                    	
                        // When the story is posted, echo the success and the post Id.
                        final String postId = values.getString("post_id");
                        
                        if (postId != null) {
                            Toast.makeText(MainActivity.this, "Posted story, id: " + postId,
                                Toast.LENGTH_SHORT).show();
                        } else {
                            // User clicked the Cancel button
                            Toast.makeText(MainActivity.this, "Publish cancelled", 
                                Toast.LENGTH_SHORT).show();
                        }
                        
                    } else if (error instanceof FacebookOperationCanceledException) {
                        // User clicked the "x" button
                        Toast.makeText(MainActivity.this, "Publish cancelled", Toast.LENGTH_SHORT).show();
                        
                    } else {
                        // Generic, ex: network error
                        Toast.makeText(MainActivity.this, "Error posting story", Toast.LENGTH_SHORT).show();
                    }
                }

            }).build();
        
        feedDialog.show();
    }

Я поймал FacebookException!

09-22 19:34:49.325: E/ActivityThread(12202): Failed to find provider info for com.facebook.katana.provider.PlatformProvider
09-22 19:34:49.325: I/MainActivity(12202): session = {Session state:CREATED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:1111111111111} isOpen = false isClosed = false
09-22 19:34:49.325: D/AndroidRuntime(12202): Shutting down VM
09-22 19:34:49.325: W/dalvikvm(12202): threadid=1: thread exiting with uncaught exception (group=0x418cc700)
09-22 19:34:49.325: E/ActivityThread(12202): Failed to find provider info for com.facebook.wakizashi.provider.PlatformProvider
09-22 19:34:49.405: D/dalvikvm(12202): GC_FOR_ALLOC freed 891K, 9% free 10493K/11452K, paused 21ms, total 21ms
09-22 19:34:52.365: E/AndroidRuntime(12202): FATAL EXCEPTION: main
09-22 19:34:52.365: E/AndroidRuntime(12202): java.lang.IllegalStateException: Could not execute method of the activity
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at android.view.View$1.onClick(View.java:3633)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at android.view.View.performClick(View.java:4240)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at android.view.View$PerformClick.run(View.java:17721)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at android.os.Handler.handleCallback(Handler.java:730)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at android.os.Handler.dispatchMessage(Handler.java:92)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at android.os.Looper.loop(Looper.java:137)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at java.lang.reflect.Method.invoke(Method.java:525)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at dalvik.system.NativeStart.main(Native Method)
09-22 19:34:52.365: E/AndroidRuntime(12202): Caused by: java.lang.reflect.InvocationTargetException
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at java.lang.reflect.Method.invoke(Method.java:525)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at android.view.View$1.onClick(View.java:3628)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	... 11 more
09-22 19:34:52.365: E/AndroidRuntime(12202): Caused by: com.facebook.FacebookException: Attempted to use a Session that was not open.
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at com.facebook.widget.WebDialog$BuilderBase.<init>(WebDialog.java:485)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at com.facebook.widget.WebDialog$FeedDialogBuilder.<init>(WebDialog.java:669)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at com.kaeriasarl.psslite.activities.MainActivity.publishFeedDialog(MainActivity.java:131)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at com.kaeriasarl.psslite.activities.MainActivity.shareLinkToFacebook(MainActivity.java:116)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	at com.kaeriasarl.psslite.activities.MainActivity.onClickFeature(MainActivity.java:99)
09-22 19:34:52.365: E/AndroidRuntime(12202): 	... 14 more
09-22 19:34:52.475: I/GAV3(12202): Thread[GAThread,5,main]: No campaign data found.

Насколько я понимаю из логов, основная проблема в том, что результат Session.getActiveSession() не должен быть нулевым и должен быть открыт, но, как я вижу, session имеет статус только CREATED! Но я сделал все этапы, как сказано в учебнике Facebook! Помогите, пожалуйста!


person Alex Zezekalo    schedule 22.09.2014    source источник


Ответы (2)


После расследования я решил свою проблему:

1) Before creating feedDialog I should check if Active Session is opened and if not then I should directly open Active Session

	if (Session.getActiveSession() == null || !Session.getActiveSession().isOpened()) {
        Session.openActiveSession(MainActivity.this, true, callback);
    } else {
        publishFeedDialog();
    }

2) and call publishFeedDialog() in Session.StatusCallback

    private Session.StatusCallback callback = new Session.StatusCallback() {
		
		@Override
		public void call(Session session, SessionState state, Exception exception) {
			
			if (state.isOpened() && isFbShare) {
				publishFeedDialog();
			}
		}
	};

person Alex Zezekalo    schedule 23.09.2014
comment
благодарить. Это сэкономило мое время. Я начал получать эту проблему после удаления приложения FB с моего телефона. - person Narek; 15.10.2014
comment
Спасибо @Alex Zezekalo. Спас мою жизнь - person Raghu Mudem; 09.01.2015
comment
О боже мой, работа идеально подходит для меня. Спасибо @Alex Zezekalo. - person sandeepmaaram; 16.02.2015

В дополнение к принятому ответу выше, если это первый пользовательский опыт, пользователю необходимо будет войти в систему, чтобы создать сеанс. Для этого вам нужно добавить LoginActivity в ваш AndroidManifest.xml —

    <activity
        android:name="com.facebook.LoginActivity"
        android:label="@string/title_activity_facebook_login" >
    </activity>
person karth500    schedule 12.02.2015