簡體   English   中英

Facebook SDK:創建WebDialog.FeedDialogBu​​ilder時未“打開”會話狀態

[英]Facebook SDK: not “opened” session state while creating 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()的結果不應為null,而應將其打開,但正如我所見, session的狀態僅為CREATED! 但是我按照Facebook教程所述完成了所有階段! 請幫助!

經過調查,我解決了我的問題:

1)在創建feedDialog之前,我應該檢查是否打開了Active Session,如果沒有,則應該直接打開Active Session

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

2)並在Session.StatusCallback中調用publishFeedDialog()

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

除了上面接受的答案之外,如果這是第一次用戶體驗流程,則用戶將需要登錄以創建會話。 為此,您需要將LoginActivity添加到AndroidManifest.xml中-

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM