2015-05-01 2 views
5

мне нужно реализовать facebook логин в моем app.Here мой класс:Facebook Android SDK v4 Войти отменить

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

И мой класс:

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

}

При входе пользователя мне нужно проверить публикацию_идействий как действие:

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

То, что я не хватает, пожалуйста, помогите мне, я исследования в течение длительного времени. Спасибо вам большое.

Edit: , когда это произошло, 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 : **

Update - Важно

Вам нужно добавить App Id в конце FacebookContentProvider, как FacebookContentProvider1234, если 1234 - ваш идентификатор приложения. Для примера

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

Если я удалю приложение facebook с моего устройства, это нормально .but пользователь не сделает это, вы думаете, что это ошибка 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 sdk 4.6.0, когда я отключил установленное приложение facebook. Потребовалось некоторое время, чтобы понять, что все работает нормально, если не установлено приложение facebook или установлено приложение facebook.

Из-за этого особого случая, когда приложение facebbook установлено и отключено, а также потому, что я также предоставляю логин google. Я не расследую больше времени в этом вопросе.

Happy Day

Смежные вопросы