2015-05-01 9 views
5

i facebook Login in meinem app.Here implementieren müssen, ist meine Klasse:Facebook-Login android sdk v4 abbrechen

Manifest:

<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" /> 

Und meine Klasse:

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

}

Wenn Benutzer anmelden, muss ich publish_actions für ähnliche Aktion überprüfen:

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

Aber, es ist alway abbrechen:

DebugLog.d("login fb cancel"); 

Was mir persönlich fehlt, bitte helfen Sie mir, ich habe Forschung für lange Zeit. Vielen Dank.

Edit: , wenn es passiert ist, das logcat (ohne Filter) zeigen:

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

Haben Sie Ergebnisse? –

+0

Es gibt einen Bug für Facebook für dieses Problem (derzeit wegen Inaktivität geschlossen), kommentieren und abonnieren sie, um es wieder zu öffnen und zu lösen. developers.facebook.com/bugs/1621984714705591 – Talihawk

Antwort

0

Ich denke, das Problem entsteht, wenn das Gerät eine native Facebook-App installiert haben. Versuchen Sie Code auf einem Gerät auszuführen, auf dem keine Facebook App installiert ist.

Auch, versuchen Sie die App von Facebook Entwickler-Seite entfernen und fügen Sie es erneut.

Siehe ähnliche Fragen hier

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 : **

Update - Wichtige

Sie benötigen App Id am Ende FacebookContentProvider, wie FacebookContentProvider1234 hinzuzufügen, Wenn 1234 Ihre App-ID ist. Für das Beispiel

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

Wenn ich facebook app von meinem Gerät deinstalliere, ist es in Ordnung. Aber Benutzer wird es nicht tun, glauben Sie, es ist facebook sdk Fehler? – tgioihan

+0

Ich glaube nicht, es ist ein Fehler auf Facebook Seite ,. Ich integrierte FB sdk mit meiner App und ich testete es mit und ohne native App, es funktionierte gut – penguin

+1

Ich denke, ich brauche eine Überprüfung für die Anmeldung, aber in diesem Fall sollte FB SDK Fehler zurückgeben – tgioihan

0

ich Sie Aufruf von Facebook-App vermeiden wollen verwenden diese Facebook-Login Verhalten einzustellen nur Auth Dialog zu verwenden:

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

oder, wenn Sie LoginButton verwendet Objekt für die Anmeldung:

loginButton.setLoginBehavior(LoginBehavior.SUPPRESS_SSO); 
0

Ich habe genau das gleiche Problem mit facebook sdk 4.6.0, wenn ich meine installierte Facebook-App deaktivieren. Es brauchte einige Zeit um herauszufinden, dass alles ohne installierte Facebook App oder installierte Facebook App funktioniert.

Da es ein ganz besonderer Fall ist, dass die Facebbook App installiert und deaktiviert ist, und weil ich auch eine Google-Anmeldung zur Verfügung stelle. Ich untersuche in dieser Ausgabe nicht mehr Zeit.

Happy Day

Verwandte Themen