![](/img/trans.png)
[英]Facebook SDK for Unity Android does not log in if Facebook App is installed
[英]Log in Facebook SDK in Android App
大家好,謝謝!
我想在我的Android應用程序中使用Facebook登錄。
我已經為此工作了很長時間,但找不到問題所在。 我所發現的是,當它嘗試運行“ uiHelper.onCreate(savedInstanceState);”行時,它崩潰了。 我正在使用facebook sdk,如果您需要更多信息,請告訴我。
那就是我嘗試過的代碼:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
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.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.UserInfoChangedCallback;
import java.util.Arrays;
import java.util.List;
public class Login extends FragmentActivity
{
private LoginButton FBLoginBtn;
private UiLifecycleHelper uiHelper;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
FBLoginBtn = (LoginButton) findViewById(R.id.FBLoginButton);
uiHelper = new UiLifecycleHelper(this, statusCallback);
//Next step is where the app breaks down *****************/
uiHelper.onCreate(savedInstanceState);
FBLoginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback()
{
@Override
public void onUserInfoFetched(GraphUser user)
{
if(user != null)
{
Log.d("FacebookLogIn", "Logged Successfully");
}
else
{
Toast.makeText(getApplicationContext(), "Not able to connect with Facebook", Toast.LENGTH_LONG).show();
}
}
});
}
@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);
}
private Session.StatusCallback statusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception)
{
if (state.isOpened())
{
Log.d("FacebookSampleActivity", "Facebook session opened");
}
else if (state.isClosed())
{
Log.d("FacebookSampleActivity", "Facebook session closed");
}
}
};
@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onSaveInstanceState(Bundle savedState) {
super.onSaveInstanceState(savedState);
uiHelper.onSaveInstanceState(savedState);
}
}
如果您能給我一些解決方法,我將不勝感激! ;)非常感謝您!!
使用https://github.com/sromku/android-simple-facebook 。 這是非常容易使用。
宜蘭
嘗試不使用UiLifecycleHelper
。 以下代碼可能會對您有所幫助。 我本人將其用於在我的應用程序中使用Facebook登錄,並且工作正常。
package com.example.integration;
import java.util.Arrays;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
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.facebook.widget.LoginButton;
public class MainActivity extends Activity {
private LoginButton fbLoginBtn;
private SharedPreferences mPrefs;
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(final Session session, final SessionState state, final Exception exception) {
onSessionStateChange(session, state, exception);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fbLoginBtn = (LoginButton) findViewById(R.id.fb_login_button);
fbLoginBtn.setReadPermissions(Arrays.asList("email"));
mPrefs = getPreferences(MODE_PRIVATE);
}
@Override
public void onResume() {
super.onResume();
Session session = Session.getActiveSession();
if (session != null &&
(session.isOpened() || session.isClosed()) ) {
onSessionStateChange(session, session.getState(), null);
}
}
private void onSessionStateChange(final Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
Editor edit = mPrefs.edit();
edit.putString("access_token", session.getAccessToken());
edit.putString("expires", session.getExpirationDate() + "");
edit.commit();
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
String firstName = user.getFirstName();
String lastName = user.getLastName();
String id = user.getId();
String email = (String) user.asMap().get("email");
Log.i("facebookid", id);
Log.i("firstName", firstName);
Log.i("lastName", lastName);
Log.i("AccessToken", session.getAccessToken());
Log.i("Email", email);
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("name", firstName);
startActivity(intent);
}
}
});
}
else if (state.isClosed()) {
Toast.makeText(this, "Please Login", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(MainActivity.this, requestCode, resultCode, data);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.