Я пытался заставить работать вход в Facebook (наряду с входом в G+) в моем приложении. G+ работает нормально, и теперь я решил добавить интеграцию с Facebook.
У меня есть идентификатор приложения из facebook, и я указал его в манифесте так:
<meta-data
android:name="com.facebook.skd.ApplicationId"
android:value="@string/app_id" />
Вот строковый ресурс:
<string name="app_id">000000000000000</string>
А вот мой код входа в систему с цензурой соответствующей информации. Я не понимаю, почему в строке Session.openActiveSession
в разделе Facebook есть исключение NullPointerException, в котором говорится, что «Аргумент 'applicationId' не может быть нулевым. Это link предоставит вам информацию о LogCat. Я новичок в разработке для Android и еще более новичок в работе с Facebook, просто к вашему сведению.
package com.example.example;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.android.Facebook;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.plus.PlusClient;
import com.google.android.gms.plus.model.people.Person;
public class LoginActivity extends Activity implements View.OnClickListener, ConnectionCallbacks, OnConnectionFailedListener{
public static final String PREFS_NAME = "MyPrefsFile";
public static Boolean mFirstTimeUsingApp = true;
private static final String TAG = LoginActivity.class.getSimpleName();
//Google Plus Member Variables
protected static final int REQUEST_CODE_RESOLVE_ERR = 9000;
protected PlusClient mPlusClient;
protected ConnectionResult mPlusConnectionResult;
protected ProgressDialog mPlusConnectionProgressDialog;
protected int SIZE_WIDE = 1;
//Facebook Member Variables
private static final String APP_ID = "000000000000000";
private Facebook mFacebook;
private ProgressDialog mFacebookProgress;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences mSharedPreferences = getSharedPreferences(PREFS_NAME, 0);
boolean firstTimeUsingapp = mSharedPreferences.getBoolean("firstTimeUsingApp", true);
mPlusClient = new PlusClient.Builder(this, this, this).setVisibleActivities("http://schemas.google.com/AddActivity").build();
if (firstTimeUsingapp == true) {
setContentView(R.layout.activity_login);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
/*-------------------------------------*/
/*----------Google Plus Login----------*/
/*-------------------------------------*/
SignInButton btnSignInGooglePlus = (SignInButton) findViewById(R.id.google_plus_sign_in_button);
btnSignInGooglePlus.setSize(SIZE_WIDE);
findViewById(R.id.google_plus_sign_in_button).setOnClickListener(this);
//Button btnSignOutGooglePlus = (Button) findViewById(R.id.sign_out);
Log.v(TAG, "5");
Log.v(TAG, "6");
//mPlusClient = new PlusClient.Builder(this, this, this).setVisibleActivities("http://schemas.google.com/AddActivity").build();
//Progress bar to be displayed if the connection failure is not resolved.
mPlusConnectionProgressDialog = new ProgressDialog(this);
mPlusConnectionProgressDialog.setMessage("Signing in...");
/*-------------------------------------*/
/*-----------Facebook Login------------*/
/*-------------------------------------*/
mFacebookProgress = new ProgressDialog(this);
LoginButton mFacebookButton = (LoginButton) findViewById(R.id.facebook_sign_in_button);
Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}
});
/*-------------------------------------*/
/*------------Twitter Login------------*/
/*-------------------------------------*/
//TODO
/*-------------------------------------*/
/*----------Site Account Login---------*/
/*-------------------------------------*/
//TODO
}
else {
setContentView(R.layout.activity_login_pending);
Log.v(TAG, "99");
}
}
@Override
protected void onStart() {
Log.v(TAG, "onStart called");
super.onStart();
Log.v(TAG, "super.onStart called");
if (mPlusClient.isConnected() == false) {
mPlusClient.connect();
}
Log.v(TAG, "mPlusClient connected");
}
@Override
protected void onStop() {
super.onStop();
mPlusClient.disconnect();
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if(mPlusConnectionProgressDialog.isShowing()) {
if (result.hasResolution()) {
try {
result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
} catch (SendIntentException e){
mPlusClient.connect();
}
}
}
mPlusConnectionResult = result;
}
@Override
public void onConnected(Bundle arg0) {
if (mPlusConnectionProgressDialog != null) {
if (mPlusConnectionProgressDialog.isShowing() == true) {
mPlusConnectionProgressDialog.dismiss();
}
}
Person person = mPlusClient.getCurrentPerson();
String userID = person.getId();
SharedPreferences sharedPreferences = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("userID", userID);
editor.commit();
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
public void onDisconnected() {
}
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) {
mPlusConnectionResult = null;
mPlusClient.connect();
}
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.google_plus_sign_in_button && !mPlusClient.isConnected()) {
if (mPlusConnectionResult == null) {
mPlusConnectionProgressDialog.show();
} else {
try {
mPlusConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
} catch (SendIntentException e) {
//Try connecting again.
mPlusConnectionResult = null;
mPlusClient.connect();
mPlusClient.disconnect();
}
}
} else if (view.getId() == R.id.facebook_sign_in_button) /* && not sure what goes here TODO*/ {
}
}
protected void errorLogin() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.error_login_title);
builder.setMessage(R.string.error_login_message);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}
<string name="app_id">000000000000000</string>
String? Или вы разместили его здесь, чтобы скрыть свой реальный идентификатор приложения? - person Salman Khakwani   schedule 13.10.2013Facebook SDK
уже поддерживает файлы cookie в общих настройках. Вы можете просто получить сохраненные файлы cookie с помощью этого методаsession.getAccessToken()
после создания объекта сеанса. - person Salman Khakwani   schedule 13.10.2013