2017-01-17 11 views
0

私はfacebook sdkを統合したいアプリを作成しています。私はfacebookでユーザにログインしたいが、問題が発生している。カスタムボタンとFacebookの統合

これは1回だけ動作しています。私がアプリをインストールしてfacebookでログインしても動作していますが、自分のアプリをアンインストールしてから、インストールしてもう一度facebookにログインしようとすると動作しません。 access permissionと何もしないことを求めていません。

私はもう1つの質問をしたい、私はしたいカスタムフェイスブックのログインボタンと正常にログイン後に行くActivityに行く。

ここで私はすでに何をしていますか?私は間違いがどこにあるのか分からない?

  <ImageButton 
       android:id="@+id/btnFblogin" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@null" 
       android:onClick="onClick" 
       android:src="@drawable/fb_signin" /> 

      <com.facebook.login.widget.LoginButton 
       android:id="@+id/fb_login_button" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:visibility="gone" 

はここに私の断片である:

はここに私のメインのxmlです

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 

    FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
    btnFbLog = (ImageButton) view.findViewById(R.id.btnFblogin); 
    btnFbLog.setOnClickListener(this); 
     return view;} 

    public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btnFblogin: 
      mSignInClicked = true; 
      Toast.makeText(getApplicationContext(), "Clicked on facebook login", Toast.LENGTH_SHORT).show(); 


      fbloginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        //updateFacebookButtonUI(); 
        Profile profile = Profile.getCurrentProfile(); 
        loginSocial(profile.getId(), Const.SOCIAL_FACEBOOK); 
       } 

       @Override 
       public void onCancel() { 

       } 

       @Override 
       public void onError(FacebookException error) { 

       } 
      }); 

public void onActivityResult(int requestCode, int responseCode, Intent data) { 
    super.onActivityResult(requestCode, responseCode, data); 
    callbackManager.onActivityResult(requestCode, responseCode, data); 



private void loginSocial(String id, String loginType) { 
    if (!AndyUtils.isNetworkAvailable(activity)) { 
     AndyUtils.showToast(getResources().getString(R.string.no_internet), 
       activity); 
     return; 
    } 
    AndyUtils.showCustomProgressDialog(activity, 
      getResources().getString(R.string.text_signin), false, null); 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put(Const.URL, Const.ServiceType.LOGIN); 
    map.put(Const.Params.SOCIAL_UNIQUE_ID, id); 
    map.put(Const.Params.DEVICE_TYPE, Const.DEVICE_TYPE_ANDROID); 
    map.put(Const.Params.DEVICE_TOKEN, 
      new PreferenceHelper(activity).getDeviceToken()); 
    map.put(Const.Params.LOGIN_BY, loginType); 
    new HttpRequester(activity, map, Const.ServiceCode.LOGIN, this); 

} 
+0

はあなたがFacebookアプリを携帯電話にインストールされていますか?あなたがインストールされていないとき、あなたは問題を再現できますか? –

+0

はい、私のデバイスにfacebookがインストールされています – user7108398

+0

'onError(..)'を調べましたか? –

答えて

0

あなたは簡単にcom.facebook.login.LoginManager経由でカスタムFacebookのログインボタンを作成することができます。 Facebookボタンは、このクラスのラッパーのみです。

サンプル:

private void loginWithFacebook() { 
    if(AccessToken.getCurrentAccessToken() != null && Profile.getCurrentProfile() != null) { 
     //logout 
     LoginManager.getInstance().logOut(); 
    } else { 
     //login 
     callbackManager = CallbackManager.Factory.create(); 
     LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Toast.makeText(ActivityLogin.this, "onSuccess: " + loginResult.getAccessToken().getUserId(), Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(ActivityLogin.this, "onCancel", Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Toast.makeText(ActivityLogin.this, "onError: " + error.getLocalizedMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); 
    } 
} 

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

私のコードに従ってこのコードを "btnFblogin"のonclickに入れましたか? – user7108398

+0

はい、どこからでも呼び出すことができます。あなたの場合、あなたの 'btnFbLogin.onClick()'に 'loginWithFacebook()'を呼びたいと思います。しかし、自分でドロウアブル/テキストのログイン/ログアウト状態を管理する必要があります。 –