2014-01-14 4 views
0

Я реализую Facebook Войти в моем приложении для Android. Проблема заключается в том, что когда я запускаю приложение, он перенаправляется на страницу входа в facebook одним нажатием кнопки в моей основной деятельности. Когда я вводим учетные данные, отображается белая страница, и ничего не происходит. Кроме того, если я запустил приложение во второй раз, появляется только пустая страница. Я попытался включить/выключить функцию единого знака на странице настроек разработчика на facebook, но это не помогло. Вот мой код активности входа в Facebook.Facebook Войти Проблема в android

public class FacebookLogin extends Activity { 

// Your Facebook APP ID 
private static String APP_ID = "xxxxxxx"; // Replace with your App 
                // ID 

// Instance of Facebook Class 
private Facebook facebook = new Facebook(APP_ID); 
private AsyncFacebookRunner mAsyncRunner; 
String FILENAME = "AndroidSSO_data"; 
private SharedPreferences mPrefs; 

@SuppressWarnings("deprecation") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mAsyncRunner = new AsyncFacebookRunner(facebook); 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     // Start AsyncTASK here 
     loginToFacebook(); 
    } else { 

     DialogClass 
       .createDAlertDialog(
         FacebookLogin.this, 
         "Please Check Internet Connection \n Please Turn on Internet", 
         true); 

    } 

} 

/** 
* Function to login into facebook 
* */ 
@SuppressWarnings("deprecation") 
public void loginToFacebook() { 

    mPrefs = getPreferences(MODE_PRIVATE); 
    String access_token = mPrefs.getString("access_token", null); 
    long expires = mPrefs.getLong("access_expires", 0); 

    if (access_token != null) { 
     facebook.setAccessToken(access_token); 
     Log.d("FB Sessions", "" + facebook.isSessionValid()); 
    } 

    if (expires != 0) { 
     facebook.setAccessExpires(expires); 
    } 

    if (!facebook.isSessionValid()) { 
     facebook.authorize(this, 
       new String[] { "email", "publish_stream" }, 
       new DialogListener() { 

        @Override 
        public void onCancel() { 
         // Function to handle cancel event 
        } 

        @Override 
        public void onComplete(Bundle values) { 
         // Function to handle complete event 
         // Edit Preferences and update facebook acess_token 
         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", 
           facebook.getAccessToken()); 
         editor.putLong("access_expires", 
           facebook.getAccessExpires()); 
         editor.commit(); 

        } 

        public void onAuthFail(String error) { 
         Log.e("FB", "AuthFailed: " + error); 
         Toast.makeText(FacebookLogin.this, "Auth fail", 
           Toast.LENGTH_LONG).show(); 
         startActivity(new Intent(FacebookLogin.this, 
           SignIn.class)); 
        } 

        public void onAuthSucceed() { 
         Log.e("FB", "AuthSucceed"); 
         Toast.makeText(FacebookLogin.this, "Auth success", 
           Toast.LENGTH_LONG).show(); 
         startActivity(new Intent(FacebookLogin.this, 
           Logout.class)); 

        } 

        @Override 
        public void onError(DialogError error) { 
         // Function to handle error 

        } 

        @Override 
        public void onFacebookError(FacebookError fberror) { 
         // Function to handle Facebook errors 

        } 

       }); 
    } 
} 

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

/** 
* Function to show Access Tokens 
* */ 
public void showAccessTokens() { 
    String access_token = facebook.getAccessToken(); 

    Toast.makeText(getApplicationContext(), 
      "Access Token: " + access_token, Toast.LENGTH_LONG).show(); 
} 

/** 
* Function to Logout user from Facebook 
* */ 
@SuppressWarnings("deprecation") 
public void logoutFromFacebook() { 
    mAsyncRunner.logout(this, new RequestListener() { 
     @Override 
     public void onComplete(String response, Object state) { 
      Log.d("Logout from Facebook", response); 
      if (Boolean.parseBoolean(response) == true) { 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 

        } 

       }); 

      } 
     } 

     @Override 
     public void onIOException(IOException e, Object state) { 
     } 

     @Override 
     public void onFileNotFoundException(FileNotFoundException e, 
       Object state) { 
     } 

     @Override 
     public void onMalformedURLException(MalformedURLException e, 
       Object state) { 
     } 

     @Override 
     public void onFacebookError(FacebookError e, Object state) { 
     } 
    }); 
} 

} 
+0

У вас есть свой идентификатор приложения с вами ... вы его создали? –

+0

Код, который вы используете, содержит более старый api в facebook, который устарел. Попробуйте использовать уровень api 3. –

+0

Да, у меня есть мой идентификатор приложения. – UselessNoob

ответ

1

Я реализовал то же самое для приложения для телефона Windows. Я столкнулся с той же проблемой. Но это правильно. https://github.com/sravich/MvvmCross-Facebook-Login

Вы можете воспользоваться этой ссылкой, чтобы проверить код и выполнить его аналогичным способом для платформы Android. Логика такая же.