私のアプリでは、facebook[〜#〜] sdk [〜#〜]を使用してログインを実行し、メソッドを登録しています。
一般的なFaceBookアプリケーションを使用している場合、またはデバイスで通常のWebブラウザーを使用している場合は問題ありません。
しかし、デバイスにFaceBook Liteがあり、一般的なFaceBookアプリケーション、facebook-sdkを使用してログイン/サインアップしようとすると、ログ/メッセージなしでアプリが閉じるため、この問題が発生した理由がわかりません。
どうすればその問題を修正できますか? -FaceBook Liteアプリをスキップして、代わりにブラウザーを使用できますか?
更新:
通常のFacebookアプリを使用している場合のビデオです。問題ありません。
ここに、デバイスにフェイスブックアプリライトがあり、クラッシュする場合のビデオを示します。
私のコードスニペット:
LoginManager.getInstance()
.logInWithReadPermissions(getActivity(), Arrays.asList("public_profile"));
LoginManager.getInstance()
.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(final LoginResult loginResult) {
Log.i("MainActivity", "@@@onSuccess");
GraphRequest request = GraphRequest
.newMeRequest(loginResult.getAccessToken(),
(object, response) -> {
Log.i("MainActivity",
"@@@response: " + response.toString());
try {
///
} catch (JSONException e) {
////
}
});
}
@Override
public void onCancel() {
Log.i("MainActivity", "@@@onCancel");
}
@Override
public void onError(FacebookException error) {
Log.i("MainActivity", "@@@onError: " + error.getMessage());
}
});
まあ、私はいくつかの[〜#〜] lolipop [〜#〜]デバイスでワイヤード動作を取得していましたFacebookネイティブアプリケーションを開く前にアプリを閉じ、他のデバイスでただし、アプリはfacebook liteのみで終了します。
アクティビティで_noHistory=true
_属性を使用していたので、onStop()
の呼び出しによりダイアログが表示されると、アクティビティはスタックから削除されました。
_<activity
Android:name=".AuthActivity"
Android:screenOrientation="portrait"
Android:noHistory="true"
Android:windowSoftInputMode="stateHidden" />
_
その属性を削除した後、うまくいきました!
あなたはFBのモットーを知っています-速く動き、物を壊します。 SDKのネイティブアプリとの統合は、時々壊れる問題の1つです。
Facebook SDKにログインにwebを使用させることができます:
LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY)
以下のコードはfacebookでうまく動作します。 devideでfacebookアプリが見つからない場合、webViewを開いてデータを取得しますonCreate()またはonStart()で次のメソッドを呼び出します。
private void facebookCallback() {
callbackManager = CallbackManager.Factory.create();
btnFacebook.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
progressDialog.setMessage("Connection Facebook...");
progressDialog.show();
String accessToken = loginResult.getAccessToken().getToken();
Log.i("accessToken", accessToken);
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.i("LoginActivity", response.toString());
try {
System.out.println("----------------------"+object.get("email").toString());
verifySocialAccount(object.get("email").toString());
} catch (JSONException e) {
LoginManager.getInstance().logOut();
progressDialog.dismiss();
Toast.makeText(LoginActivity.this,"Can not find email Address.",Toast.LENGTH_SHORT).show();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
System.out.println("-------onCancel");
}
@Override
public void onError(FacebookException error) {
System.out.println("---------onError");
Log.v("LoginActivity", error.getCause().toString());
}
});
}
アクティビティコードXML:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_marginLeft="20dp"
Android:layout_marginRight="20dp"
Android:layout_marginTop="10dp"
Android:layout_weight="1"
Android:layout_marginBottom="10dp"
Android:orientation="horizontal"
Android:weightSum="6">
<com.facebook.login.widget.LoginButton
xmlns:facebook="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/btnFacebook"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/facebookBlue"
Android:paddingTop="15dp"
Android:paddingLeft="15dp"
facebook:com_facebook_login_text="SIGN IN WITH FACEBOOK"
Android:paddingBottom="15dp"
Android:textColor="@color/white"
Android:textSize="15dp" />
</LinearLayout>