2017-01-17 1 views
0

facebook sdk을 통합하려는 앱을 만들고 있습니다. facebook으로 로그인하고 싶지만 문제가 발생합니다.맞춤형 버튼과 Facebook 통합

한 번만 작동합니다. 앱을 설치하고 facebook으로 로그인하면 작동하지만 앱을 제거하고 facebook으로 다시 로그인하고 설치하려고하면 작동하지 않습니다. access permission을 요구하지 않으며 아무 것도하지 않습니다.

나는 한 번 더 질문하고 싶습니다. 사용자 정의 페이 스북 로그인 버튼을 입력하고 성공적으로 로그인하면 다음 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

는 당신이 페이스 북의 응용 프로그램은 휴대 전화에 설치되어 있습니까? 설치되지 않았을 때 u가 문제를 재현 할 수 있습니까? –

+0

예. 내 장치에 Facebook이 설치되었습니다. – user7108398

+0

'onError (..)'에 대해 살펴 보았습니까? –

답변

0

쉽게 com.facebook.login.LoginManager를 통해 사용자 정의 페이스 북의 로그인 버튼을 만들 수 있습니다. 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()'을 호출하기를 원합니다. 하지만 드로어 블/텍스트의 로그인/로그 아웃 상태는 사용자가 직접 관리해야합니다. –