2016-05-27 4 views
0

Я использовал facebook-android-sdk:4.12.0. Когда я заходил в свое приложение, приложение для родных приложений Facebook отображало имя пользователя, пароль. Здесь я пытаюсь подписаться на Facebook, он запрашивает детали и успешно регистрируется, а также отображает мою домашнюю страницу. Но если I нажмите на кнопку возврата устройства, она снова не переходит в мое приложение. Вместо этого он закрывает приложение. Я запускаю свое приложение из запуска, те же самые экраны на главном экране Facebook, но не перехожу к моему приложению.Не возвращаться в мое приложение после успешной регистрации в Facebook

Эта проблема возникает только в Устройство Samsung S4. Как решить эту проблему. Это что-то, что мне нужно сделать?

LoginFragment.java

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     rootView = inflater.inflate(R.layout.fragment_login, container, false); 

     callbackManager = CallbackManager.Factory.create(); 


     facebookLoginButton = (RelativeLayout) rootView.findViewById(R.id.facebook_login_button); 

     LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       if (loginResult.getAccessToken() != null) { 
        AccessToken.setCurrentAccessToken(loginResult.getAccessToken()); 

        mListener.onFacebookLoginSuccess(); 
       } else { 
        //Facebook access token not available. 
       } 
      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.login_cancelled_please_try_again), Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.login_cancelled_please_try_again), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     facebookLoginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       LoginManager.getInstance().logInWithReadPermissions(LoginFragment.this, Arrays.asList("public_profile", "user_friends")); 
      } 
     }); 

     return rootView; 
    } 

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

LoginActivity.java

public class LoginActivity extends FragmentActivity implements LoginFragment.OnLoginFragmentListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
    } 

    @Override 
    public void onFacebookLoginSuccess() { 
     // Launch Main Activity. 
     launchMainActivity(); 
    } 
} 
+0

Вы можете оставить здесь код – mdDroid

+0

Есть вы вернули что-либо в действие. Эффективность деятельности. @ Ramprasad , – Lampard

+0

@mdDroid Я добавил код на свой вопрос – Ramprasad

ответ

0
LoginManager.getInstance().logInWithReadPermissions(LoginFragment.this.. 
//?! probably problem here, must be activity context getActivity() 

реализовать все это в классе деятельности, а затем вызвать публичный метод для loginning из вашего фрагмента

((YourActivity)getActivity()).yourLoginMethod(); 

но проверить это:

в расширенном классе Application:

private static AccessTokenTracker mAccessTokenTracker; 

OnCreate:

FacebookSdk.sdkInitialize(mContext); 
mAccessTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(
        AccessToken oldAccessToken, 
        AccessToken currentAccessToken) { 
       if(currentAccessToken != null){ 
        SettingsService.settings.facebookToken = currentAccessToken.getToken(); 
        SettingsService.saveSettings(); 
       } 

      } 
     }; 

в манифесте:

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


<meta-data 
      android:name="com.facebook.sdk.ApplicationId" 
      android:value="@string/facebook_app_id" /> 

для настройки юзабилити:

public class SettingsModel { 
    public String facebookToken = ""; 
    //.... 
} 

и класс:

public class SettingsService { 

    private static String KEY = "yourDesiredKey"; 
    private static Context mContext; 

    public static SettingsModel settings; 

    public SettingsService(){ 
     mContext = LastGrabApplication.getLastGrabContext(); 
     //if(settings == null){ 
     settings = getSettings(); 
     //} 
    } 

    public static void saveSettings(){ 
     if(settings == null){ 
      settings = new SettingsModel(); 
     } 
     SharedPreferences.Editor editor = mContext 
       .getSharedPreferences(KEY, Activity.MODE_PRIVATE).edit(); 
     Gson gson = new Gson(); 
     String jsonSettings = gson.toJson(settings); 
     editor.putString("settings", jsonSettings); 
     editor.commit(); 
     settings = getSettings(); 
    } 


    public static SettingsModel getSettings() { 
     SharedPreferences editor = mContext.getSharedPreferences(KEY, 
       Activity.MODE_PRIVATE); 
     try{ 
      String jsonSettings = editor.getString("settings","settings"); 
      Gson gson = new Gson(); 
      settings = gson.fromJson(jsonSettings, SettingsModel.class); 
     }catch (Exception e){ 
      settings = new SettingsModel(); 
     } 

     return settings; 
    } 


} 

пожалуйста, внимание реализации в деятельности:

public void loginWithFacebook(){ 
    try{ 
     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); 
    }catch(Exception e){} 
} 

, а затем вызвать из фрагмента:

((YourActivity)getActivity()).loginWithFacebook(); 
+0

В приведенном выше коде, что такое SettingsService? – Ramprasad

+0

Это настраиваемый класс для обновления обновленного токена Facebook (я сериализую его в json и сохраняю при хранении в saveSettings) - это полезно, чтобы сохранить токен, всегда обновляемый и сохраненный. –

+0

Я обновил ответ с этим классом - надеюсь, что будет ясно)) –

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