2014-09-20 3 views
0

Я пытаюсь интегрировать логин facebook в своем приложении. Я прочитал документ на сайте разработчика facebook, но он не работает со мной. Вот мой исходный код:Ошибка аутентификации Facebook на Facebook

import android.content.Intent; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.text.TextUtils; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 
import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.model.GraphUser; 
import com.superteam.altt.R; 
import com.superteam.altt.common.Constants; 
import com.superteam.altt.utils.ToastUtil; 

public class LoginActivity extends BaseActivity implements View.OnClickListener { 

private Button btnFblogin; 
private Button btnGoogleLogin; 

/** 
* Facebook instances 
*/ 
private Session.StatusCallback statusCallback = new OnSessionStatusChangedCallback(); 

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

private void findViews() { 
    btnFblogin = (Button) findViewById(R.id.btn_login_facebook); 
    btnGoogleLogin = (Button) findViewById(R.id.btn_login_google); 

    btnFblogin.setOnClickListener(this); 
    btnFblogin.setOnClickListener(this); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.login, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

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

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btn_login_facebook: 
      logInViaFacebook(); 
      break; 
     case R.id.btn_login_google: 
      break; 
     default: 

    } 
} 

private void logInViaFacebook() { 
    startFacebookSession(); 

} 

private void startFacebookSession() { 
    Session session = Session.getActiveSession(); 
    if (session != null && !session.isOpened() && !session.isClosed()) { 
     openSession(session); 
    } else { 
     Session.openActiveSession(this, true, statusCallback); 
    } 
} 

private void openSession(Session session) { 
    Session.OpenRequest openRequest = new Session.OpenRequest(this); 
    openRequest.setPermissions(Constants.FACEBOOK_PERMISSIONS); 
    session.openForRead(openRequest); 
} 


private class OnSessionStatusChangedCallback implements Session.StatusCallback { 

    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     if (session != null && session.isOpened() && !TextUtils.isEmpty(session.getAccessToken())) { 
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

       // callback after Graph API response with user object 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 
        if (user != null) { 
         Intent intent = new Intent(getApplicationContext(),HomeActivity.class); 
         startActivity(intent); 
         Toast.makeText(getApplicationContext(),"Hello" + user.getUsername(),Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(getApplicationContext(),"Login failed",Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 
     } 
    } 
} 

} 

Тост всегда показывает «Ошибка входа». Кто-нибудь может помочь мне решить это?

ответ

0
private Session.StatusCallback statusCallback = new FBSessionStatus(); 

public void setupFacebookConnect(Bundle savedInstanceState) { 
    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

    Session session = Session.getActiveSession(); 
    if (session == null) { 
     if (savedInstanceState != null) { 
      session = Session.restoreSession(this, null, statusCallback, 
        savedInstanceState); 
     } 
     if (session == null) { 
      session = new Session(this); 
     } 
     Session.setActiveSession(session); 
     if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
      session.openForRead(new Session.OpenRequest(this) 
        .setCallback(statusCallback)); 
     } 
    } 
} 

public boolean isFacebookConnected() { 
    Session session = Session.getActiveSession(); 
    return (session.isOpened()) ? true : false; 
} 

public void connectFacebook() { 
    Session session = Session.getActiveSession(); 
    if (!session.isOpened() && !session.isClosed()) { 
     session.openForRead(new Session.OpenRequest(this) 
       .setCallback(statusCallback)); 
    } else { 
     Session.openActiveSession(this, true, statusCallback); 
    } 
} 

/* @Override 
public void onStart() { 
    super.onStart(); 
    Session.getActiveSession().addCallback(statusCallback); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    Session.getActiveSession().removeCallback(statusCallback); 
}*/ 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    Session session = Session.getActiveSession(); 
    Session.saveSession(session, outState); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session.getActiveSession().onActivityResult(this, requestCode, 
      resultCode, data); 
} 

/* 
* private String buildUserInfoDisplay(GraphUser user) { StringBuilder 
* userInfo = new StringBuilder(""); 
* 
* // Example: typed access (name) // - no special permissions required 
* userInfo.append(String.format("Name: %s\n\n", user.getName())); 
* 
* 
* 
* 
* // Example: typed access (birthday) // - requires user_birthday 
* permission 
* 
* userInfo.append(String.format("Birthday: %s\n\n", user.getBirthday())); 
* 
* userInfo.append(String.format("PHone: : %s\n\n", 
* user.getProperty("phone"))); 
* 
* // Example: partially typed access, to location field, // name key 
* (location) // - requires user_location permission 
* userInfo.append(String.format("Location: %s\n\n", user.getLocation() 
* .getProperty("name"))); 
* 
* userInfo.append(String.format("Email: : %s\n\n", 
* user.getProperty("email"))); 
* 
* // Example: access via property name (locale) // - no special permissions 
* required userInfo.append(String.format("Locale: %s\n\n", 
* user.getProperty("locale"))); 
* 
* // Example: access via key for array (languages) // - requires user_likes 
* permission JSONArray languages = (JSONArray) 
* user.getProperty("languages"); if (languages.length() > 0) { 
* ArrayList<String> languageNames = new ArrayList<String>(); for (int i = 
* 0; i < languages.length(); i++) { JSONObject language = 
* languages.optJSONObject(i); // Add the language name to a list. Use JSON 
* // methods to get access to the name field. 
* languageNames.add(language.optString("name")); } 
* userInfo.append(String.format("Languages: %s\n\n", 
* languageNames.toString())); } 
* 
* return userInfo.toString(); } 
*/ 

public class FBSessionStatus implements Session.StatusCallback { 
    @Override 
    public void call(Session session, SessionState state, 
      Exception exception) { 
     if (state.isOpened()) { 

      Request.executeMeRequestAsync(session, 
        new Request.GraphUserCallback() { 

         @Override 
         public void onCompleted(GraphUser user, 
           Response response) { 
          if (user != null) { 
           // Display the parsed user info 
           fb_username = user.getName(); 
           fb_email = (String) user 
             .getProperty("email"); 

           new FB_Login().execute(); 
           // buildUserInfoDisplay(user); 
          } 
         } 
        }); 
     } else if (state.isClosed()) { 

     } 
    } 
} 

public void disConnectFacebook() { 
    Session session = Session.getActiveSession(); 
    if (!session.isClosed()) { 
     session.closeAndClearTokenInformation(); 
    } 
} 

Если это полезно для вас, пожалуйста, оцените

+0

Спасибо. Но я до сих пор не могу получить пользователя, он по-прежнему недействителен. Я не знаю, что здесь не так :( –

0

я действительно советую вам использовать SimpleFacebook библиотеку. Я начал использовать Facebook SDK, но я понял, что у него плохой/сложный дизайн программного обеспечения.

Если вы хотите использовать его правильно, вы должны сначала хорошо провести время, изучая причудливые концепции.

SimpleFacebook это то, что должен был сделать Facebook.

Просто, чтобы получить представление о том, пример о том, как выполнить задачу входа:

// Инициализировать обратного вызова слушателя:

OnLoginListener onLoginListener = new OnLoginListener() { 
    @Override 
    public void onLogin() { 
     // change the state of the button or do whatever you want 
     Log.i(TAG, "Logged in"); 
    } 

    @Override 
    public void onNotAcceptingPermissions(Permission.Type type) { 
     // user didn't accept READ or WRITE permission 
     Log.w(TAG, String.format("You didn't accept %s permissions", type.name())); 
    } 

    /* 
    * You can override other methods here: 
    * onThinking(), onFail(String reason), onException(Throwable throwable) 
    */ 
}; 

mSimpleFacebook.login(onLoginListener); 
+0

спасибо, но я использую андроид-студию, которая не может быть импортирована в андроид-студию. Кроме того, я просто хочу выяснить, что не так в моем исходном коде и как исправить Это. –

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