2015-05-01 96 views
5

我需要在我app.Here實施Facebook登錄是我的課:Facebook的Android SDK中V4登錄取消

清單:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> 
    <activity android:name="com.facebook.FacebookActivity" 
     android:configChanges= 
      "keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" 
     android:label="@string/app_name" /> 
    <provider android:authorities="com.facebook.app.FacebookContentProvider" 
     android:name="com.facebook.FacebookContentProvider" 
     android:exported="true" /> 

而我的等級:

public abstract class FaceBookActivityImpl extends BaseActivity { 
private CallbackManager callbackManager; 
private ShareDialog shareDialog; 

@Override 
protected void initView() { 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException e) { 

     } 
    }); 
    FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS); 
} 

public CallbackManager getCalbackManager(){ 
    return callbackManager; 
} 

public ShareDialog getShareDialog(){ 
    if(shareDialog==null){ 
     shareDialog = new ShareDialog(this); 
     // this part is optional 
     shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { 
      @Override 
      public void onSuccess(Sharer.Result result) { 
       DebugLog.d("share success " + result.getPostId()); 
      } 

      @Override 
      public void onCancel() { 

      } 

      @Override 
      public void onError(FacebookException e) { 

      } 
     }); 
    } 
    return shareDialog; 
} 

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

}

當用戶登錄時,我需要檢查publish_actions類似的操作:

LoginManager.getInstance().registerCallback(((MainActivity) getContext()).getCalbackManager(), new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         DebugLog.d("login fb success "+loginResult.getRecentlyGrantedPermissions()); 
         likeTopic(); 
        } 

        @Override 
        public void onCancel() { 
         DebugLog.d("login fb cancel"); 
        } 

        @Override 
        public void onError(FacebookException e) { 
         DebugLog.d("login fb error "+e.getMessage()); 
        } 
       }); 
       LoginManager.getInstance().logInWithPublishPermissions(((MainActivity) getContext()), Arrays.asList("publish_actions")); 

但是,它送花兒給人取消:

DebugLog.d("login fb cancel"); 

我錯過了什麼,請幫助我,我爲長時間的研究。 非常感謝。

編輯: 當它發生時,logcat的(無過濾器)顯示:

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.login.LoginClient$Request" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 

+0

你有一些結果嗎? –

+0

Facebook存在針對此問題的錯誤(由於不活動而關閉),評論並訂閱它們重新打開並解決它。 developers.facebook.com/bugs/1621984714705591 – Talihawk

回答

0

我想,如果設備安裝了原生的Facebook應用程序這個問題就出現了。嘗試在沒有安裝Facebook應用程序的設備上運行代碼。

,嘗試從Facebook開發者的頁面中刪除應用程序,並再次添加它。

在這裏看到類似的問題

Can't login to Facebook if Facebook app is installed

Android Class not found : Didn't find class ... on path: DexPathList : link of class failed : **

更新 - 重要

您需要添加應用程序IDFacebookContentProvider年底,像FacebookContentProvider1234,如果1234是你的App ID。例

<provider android:authorities="com.facebook.app.FacebookContentProvider1234" 
      android:name="com.facebook.FacebookContentProvider" 
      android:exported="true" /> 
+0

如果我從我的設備卸載Facebook應用程序,沒關係,但用戶不會這樣做,你認爲這是Facebook的SDK錯誤? – tgioihan

+0

我不這麼認爲,這是Facebook方面的錯誤。我將FB sdk與我的應用程序集成在一起,我測試了它有沒有原生應用程序,它工作正常 – penguin

+1

我認爲我需要審查登錄,但是,在這種情況下,fb sdk應該返回清除錯誤 – tgioihan

0

我想避免的Facebook應用程序的調用中使用此設置的Facebook登錄行爲只使用身份驗證對話框:

LoginManager.getInstance().setLoginBehavior(LoginBehavior.SUPPRESS_SSO); 

,或者,如果你使用LoginButton對象登錄:

loginButton.setLoginBehavior(LoginBehavior.SUPPRESS_SSO); 
0

當我禁用我安裝的Facebook應用程序時,我有完全相同的問題使用Facebook的SDK 4.6.0。它需要一些時間來確定,沒有安裝Facebook應用程序或安裝Facebook應用程序啓用一切工作正常。

由於這是一個非常特殊的情況,facebbook應用程序安裝和禁用,並且我還提供了谷歌登錄。我不會在這個問題上調查更多的時間。

快樂的一天