2017-05-27 11 views
0

ダイアログ内にfacebook loginを統合していますが、コールバックが機能しません。 onActivityresultここfacebook login dialog in android

がコードで呼び出されていない...

public class SettingsDialog extends Dialog { 

private CallbackManager callbackManager; 
LoginButton facebookLogin; 
Bundle bundle; 
private GoogleApiClient mGoogleApiClient; 
ImageView facbookSignin; 
Context context; 

public SettingsDialog(@NonNull Context context) { 
    super(context); 
    this.context = context; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(context); 
    setContentView(R.layout.activity_settings_dialog); 
    getWindow().getAttributes().height = WindowManager.LayoutParams.FILL_PARENT; 
    getWindow().getAttributes().width = 500; 

    getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
    getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; 
    WindowManager.LayoutParams wlp = getWindow().getAttributes(); 

    wlp.gravity = Gravity.RIGHT; 
    getWindow().setAttributes(wlp); 

    facbookSignin = (ImageView)findViewById(R.id.fb_signin); 
    facebookLogin = (LoginButton)findViewById(R.id.fb_login_button); 

    facbookSignin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      facebookLogin.callOnClick(); 
     } 
    }); 

    callbackManager = CallbackManager.Factory.create(); 
    facebookLogin.setReadPermissions(Arrays.asList("email")); 

    facebookLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

      Toast.makeText(context, "Success", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException error) { 

     } 
    }); 

} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (callbackManager.onActivityResult(requestCode, resultCode, data)) { 
     return; 
    } 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 
} 
+0

でFacebookのサインインとの統合のためのサンプルコードはありますか?コールバックはありませんか? onerrorまたはoncancelコールバックメソッドはどうですか? –

+0

正確に私はコールバックを取得していません.theActivityResultメソッドは動作していません...どのようにしてonerrorまたはSuccessを呼び出すことができますか –

答えて

1

ダイアログがonActivityResult(int requestCode, int resultCode, Intent data)メソッドを持っていないと、あなたのコールバックがCallbackManager以来呼び出されません受け取るために呼ばれるようにCallbackManager.onActivityResult()方法を必要としますログインの結果。

ダイアログはアクティビティの一部で、別のアクティビティが(Facebookログインアクティビティのように)起動されると、ダイアログは無視されます。

解決策は、ダイアログのホストアクティビティでログインし、ログイン結果をダイアログに転送することです。

アクティビティでonActivityResult()を無効にして、CallbackManager.onActivityResult()に電話することを忘れないでください。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
} 
0

以下は機能していないものを、ダイアログフラグメント

public class SignInFragment extends DialogFragment{ 
     @Override 
       public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 

        callbackManager = CallbackManager.Factory.create(); 
       } 
      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
        view = inflater.inflate(R.layout.fragment_sign_in, null); 

      LoginManager.getInstance().registerCallback(callbackManager, mFBSignInCallback); 

     List<String> permissionNeeds = Arrays.asList("public_profile", "email"); 
     LoginManager.getInstance().logInWithReadPermissions(SignInFragment.this, permissionNeeds); 

      return view; 
      } 

private FacebookCallback<LoginResult> mFBSignInCallback = new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         Toast.makeText(mContext, "in LoginResult on success", Toast.LENGTH_LONG).show(); 
      @Override 
        public void onCancel() { 
         Log.d("VIVZ", "onCancel"); 
        } 

        @Override 
        public void onError(FacebookException e) { 
         Log.d("VIVZ", "onError " + e.getMessage()); 
         } 
       }; 

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