2015-05-01 19 views
5

Ho bisogno di implementare Facebook Login nel mio app.Here è la mia classe:Facebook Android SDK v4 login annullare

manifesto:

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

E la mia classe:

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

}

Al login utente, ho bisogno di controllare publish_actions per un'azione simile:

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

Ma, è sempre puntuale annullare:

DebugLog.d("login fb cancel"); 

Quello che mi manca, ti prego, aiutami, ho ricerca per lungo tempo. Grazie mille.

Edit: quando è successo, il logcat (senza filtro) spettacolo:

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

hai qualche risultato? –

+0

C'è un bug per Facebook per questo problema, (attualmente chiuso per inattività), commento e sottoscrizione per riaprirlo e risolverlo. developers.facebook.com/bugs/1621984714705591 – Talihawk

risposta

0

Penso che questo problema si pone se il dispositivo ha un Facebook app nativa installata. Prova a eseguire il codice su un dispositivo su cui non è installata l'app Facebook.

, prova a rimuovere l'app dalla pagina dello sviluppatore di Facebook e aggiungila di nuovo.

Vedi domande simili qui

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

Aggiornamento - Importante

È necessario aggiungere App Id alla fine del FacebookContentProvider, come FacebookContentProvider1234, se 1234 è il tuo ID app. Per esempio

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

Se disinstallo l'app di Facebook dal mio dispositivo, è ok. ma l'utente non lo farà, pensi che sia un errore di facebook sdk? – tgioihan

+0

Io non la penso così, è un errore sul lato Facebook ,. Ho integrato FB SDK con la mia app e l'ho provato con e senza app nativa, funzionava bene – penguin

+1

penso di aver bisogno di una revisione per l'accesso, tuttavia, in questo caso, fb sdk dovrebbe restituire l'errore chiaro – tgioihan

0

mi si vuole evitare chiamata di Facebook app usano questo per impostare Facebook comportamento login per usare la finestra di autenticazione unica:

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

o, se si utilizza oggetto LoginButton per il login:

loginButton.setLoginBehavior(LoginBehavior.SUPPRESS_SSO); 
0

Ho esattamente lo stesso problema utilizzando facebook sdk 4.6.0 quando disattivo la mia app di Facebook installata. Aveva bisogno di tempo per capire che tutto funziona bene senza l'app di Facebook installata o l'app di Facebook installata.

A causa di questo è un caso molto speciale che l'applicazione facebbook è installata e disattivata, e perché fornisco anche un login google. Non indago più tempo su questo problema.

Happy Day

Problemi correlati