最新のFacebook Android sdk(Sdk 4.0)を統合しました。これは、onCreateメソッドに追加したコードです。
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
if(AccessToken.getCurrentAccessToken()!=null){
Log.d(FBTAG,"facebook already logged in");
isFBLogin = true;
}
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.d(FBTAG,"facebook log in");
isFBLogin = true;
}
@Override
public void onCancel() {
// App code
isFBLogin = false;
}
@Override
public void onError(FacebookException error) {
isFBLogin = false;
Log.d(FBTAG,"facebook login error: "+error);
// App code
}
});
そしてこれは私がonClickLoginに使用したコードです
public void onClickLogin() {
LoginManager.getInstance().logInWithPublishPermissions(this, PERMISSIONS);
}
ログインボタンをクリックしてonClickLogin関数を処理することでログインできます。次回アプリを開くときは、AccessToken.getAccessTokenをチェックして、ユーザーがFacebookに既にログインしているかどうかを確認していますが、常にnullとして表示されます。とにかく、バックグラウンドでログインするための新しいSDKはありません。そのため、セッションクラスの以前のバージョンのように、常にユーザーにログインを要求する必要はありません。
LoginManagerによって返されたアクセストークンは共有設定に保存されるため、次にアプリを開いたときに、AccessToken.getCurrentAccessToken()は同じアクセストークンを持つ必要があります。これは、Sessionクラスの場合と同じです。 SDKに付属のサンプルをチェックして、それらが機能することを確認できます。
セッション間でアプリを再インストールしたり、現在のアクセストークンを明示的にnullに設定したりしていないことを確認してください。
InitializeCallbackをsdkInitializeに追加し、コールバック内のAccessTokenを確認することもできます。
FacebookSdk.sdkInitialize(getApplicationContext(), new FacebookSdk.InitializeCallback() {
@Override
public void onInitialized() {
if(AccessToken.getCurrentAccessToken() == null){
System.out.println("not logged in yet");
} else {
System.out.println("Logged in");
}
}
});
Android FacebookSDKの初期化には時間がかかります。したがって、AccessToken.getCurrentAccessToken()を呼び出す前に100ミリ秒待つ必要があります
一度この解決策を試してみると、それは私のために働いています::
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (AccessToken.getCurrentAccessToken() != null) {
Log.d(FBTAG, "facebook already logged in");
isFBLogin = true;
}
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.d(FBTAG, "facebook log in");
isFBLogin = true;
}
@Override
public void onCancel() {
// App code
isFBLogin = false;
}
@Override
public void onError(FacebookException error) {
isFBLogin = false;
Log.d(FBTAG, "facebook login error: " + error);
// App code
}
});
}
}, 100);
私はこれを自分でテストしていませんが、あなたができると思うのは、コールバックのonSuccessメソッドのLoginResultオブジェクトからAccessTokenを取得することです。
したがって、AccessToken accessToken = loginResult.getAccessToken();
次に、次のように言って、このaccessTokenを保存します。
AccessToken.setAccessToken(accessToken);
次に、AccessToken.getAccessTokenを呼び出すと、保存したaccessTokenが返されます。
次のコードを追加してください。
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
//super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode,resultCode,data);
}
1.関数をこの関数に変更します
public void onClickLogin() {
LoginManager.getInstance().logInWithReadPermissions(activity_name.this, PERMISSIONS);
}
ステップ
1)FacebookSdk.sdkInitialize(getActivity()。getApplicationContext());
2)CallbackManager mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//you will get access token here
mAccessToken = loginResult.getAccessToken();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
3)//後でAccessTokenを使用してアクセストークンを取得しますmAccessToken = AccessToken.getCurrentAccessToken();
確認してください、フラグメントからのFacebookログインを使用する場合は、
1)Facebookコールバックマネージャーを使用して、super.onActivityResult()をフラグメントで呼び出すようにしてください。
2)関連するアクティビティでonActivityResultをオーバーライドした場合、関連する「フラグメントアクティビティ」でsuper.onActivityResult()が呼び出されることを確認します。
理由はFacebookSDKプロファイルのキャッシュです。
AccessToken.setCurrentAccessToken(null);
Profile.setCurrentProfile(null);
アクティビティを破棄する前に試してください。多分それはあなたの問題を解決することができます。初めて作業するときはクリーンキャッシュで、2回目は別のアカウントにログインできます。