2013-07-18 3 views
8

enter image description hereWie kann man vermeiden zeigt bereits autorisiert App Dialog in Android Facebook SDK

Ich bin ein völlig nutzlos Seite bekommen, wenn ich das Single Sign verwenden auf für Facebook Android SDK.

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

Diese Seite würde Benutzererfahrung zerstören. Wie kann ich diesen Bildschirm entfernen?

Vielen Dank im Voraus.

Hinweis: Dieses Problem tritt nicht auf Wenn die FB-App im Gerät installiert ist. Es wird nur ausgelöst, wenn die FB-App im Gerät nicht verfügbar ist.

+0

Es sieht so aus, als ob dieses Problem schon seit langer Zeit existiert, schau dir diesen Post von 2010 an: http://stackoverflow.com/questions/4495845/how-to-avoid-ready-authorized-in-android-facebook -sdk – Shaggy

+0

Hast du das jemals herausgefunden? – Shaggy

+0

Ich habe das gleiche Problem, findet jemand eine Lösung dafür ??? –

Antwort

1

Ich bin mit dem neuesten Facebook SDK 3.6 ich glaube, und haben bisher auf HTC One & Galaxy s3 mini getestet. Diese Seite zeigt sich an keiner Stelle für mich. Ich folgte dem API-Leitfaden hier ...

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

Hier ist der Code als gut ... vielleicht ist dies helfen kann.

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

Nur als Hinweis ist dies die Fallback-Methode mit dem Webview Bitte beachten Sie das kleine x oben rechts. Übrigens ist heute die kleinste Version 4.0.1, wo das für mich immer noch passiert. – rekire

1

Bevor ich diesen Code für Facebook-Logout verwendet:

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

Nach LoginManager.getInstance().logOut(); dieser Code geändert löste das Problem.