2013-07-18 10 views
8

enter image description hereCome evitare di mostrare già autorizzato a finestra applicazione in Android Facebook SDK

sto diventando una pagina completamente inutile quando uso il Single Sign on per Facebook di Android SDK.

"You have already authorized app. Press "Okay" to continue. 

Questa pagina potrebbe distruggere l'esperienza utente. Come posso rimuovere questa schermata?

Grazie in anticipo.

Nota: non vedremo questo problema Se l'app FB è installata nel dispositivo. Verrà generato solo se l'app FB non è disponibile nel dispositivo.

+0

Sembra che questo problema potrebbe essere stato in giro per molto tempo, controllare questo post dal 2010: http://stackoverflow.com/questions/4495845/how-to-avoid-already-authorized-in-android-facebook -sdk – Shaggy

+0

Hai mai capito questo? – Shaggy

+0

Ho lo stesso problema qualcuno trova una soluzione per questo ??? –

risposta

1

Sto usando l'ultima Facebook SDK 3.6 credo e testato finora su HTC One & Galaxy s3 mini. Questa pagina non viene visualizzata per me in qualsiasi momento. Ho seguito la guida API qui ...

https://developers.facebook.com/docs/facebook-login

Ecco il codice aswell ... forse questo può aiutare.

public class LoginHandlerFrag extends Fragment { 

    private UiLifecycleHelper uiHelper; 
    private static final String TAG = "HomeFragment"; 
    // private ProfilePictureView profilePictureView; 

    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
         Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_login, container, 
       false); 

     LoginButton authButton = (LoginButton) view 
       .findViewById(R.id.authButton); 

     authButton.setReadPermissions(Arrays.asList("email", "user_location", 
       "user_birthday", "user_likes", "user_photos")); 
     authButton.setFragment(this); 

     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

     return view; 
    } 

    private void makeMeRequest(final Session session) { 
     // Make an API call to get user data and define a 
     // new callback to handle the response. 
     Request request = Request.newMeRequest(session, 
       new Request.GraphUserCallback() { 
        @Override 
        public void onCompleted(GraphUser user, Response response) { 

         // If the response is successful 
         if (session == Session.getActiveSession()) { 
          if (user != null) { 
           // profilePictureView.setProfileId(user.getId()); 
          } 
         } 
         if (response.getError() != null) { 
          // Handle errors, will do so later. 
         } 
        } 
       }); 
     request.executeAsync(); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     uiHelper = new UiLifecycleHelper(getActivity(), callback); 
     uiHelper.onCreate(savedInstanceState); 
    } 

    private void onSessionStateChange(Session session, SessionState state, 
             Exception exception) { 
     session = Session.getActiveSession(); 
     SharedPreferences storedPrefs = PreferenceManager 
       .getDefaultSharedPreferences(getActivity().getApplicationContext()); 
     SharedPreferences.Editor editor = storedPrefs.edit(); 
     editor.putBoolean("userLoggedTracker", true); 
     editor.commit(); 

     if (state.isOpened()) { 
      Log.i(TAG, "Logged in..."); 
      makeMeRequest(session); 
      editor.putBoolean("userLoggedTracker", false); 
      editor.commit(); 
      getView().setVisibility(View.GONE); 

     } else if (state.isClosed()) { 
      Log.i(TAG, "Logged out..."); 
      editor.putBoolean("userLoggedTracker", true); 
      editor.commit(); 
      getView().setVisibility(View.VISIBLE); 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     Session session = Session.getActiveSession(); 
     if (session != null && (session.isOpened() || session.isClosed())) { 
      onSessionStateChange(session, session.getState(), null); 
     } 
     uiHelper.onResume(); 
    } 

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

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     uiHelper.onSaveInstanceState(outState); 
    } 
} 
+1

Proprio come un suggerimento questo è il metodo di fallback con la webview. in alto a destra. A proposito, oggi la versione minima è la 4.0.1, dove ciò accade ancora per me. – rekire

1

Prima ho usato questo codice per Facebook di logout:

if (AccessToken.getCurrentAccessToken() == null) { 
      return; // already logged out 
     } 

     new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest 
       .Callback() { 
      @Override 
      public void onCompleted(GraphResponse graphResponse) { 

       LoginManager.getInstance().logOut(); 

      } 
     }).executeAsync(); 

Dopo cambiato in questo codice LoginManager.getInstance().logOut(); risolto il problema.

Problemi correlati