2017-01-17 3 views
0

Я создаю приложение, в котором я хочу интегрировать facebook sdk. Я хочу войти в систему с помощью пользователя facebook, но это создает проблему.Интеграция Facebook с пользовательской кнопкой

Он работает только один раз. Если я установил приложение и запустил его с помощью facebook, он работает, но когда я удалю свое приложение и попытаюсь установить его и снова войти с помощью facebook, он не работает. Он не просит access permission и ничего не делает.

Я хочу задать еще один вопрос, хочу сделать пользовательскую кнопку входа в систему facebook и после успешного входа в систему перейти к следующему Activity.

Вот что я уже сделал. Я не знаю, где ошибка?

Вот мой главный XML:

  <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" 

Вот мой фрагмент:

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

Вы можете легко создать пользовательскую кнопку facebook Войти через 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

. Я поставил этот код в onclick на «btnFblogin» в соответствии с моим кодом? – user7108398

+0

Да, вы можете позвонить ему из любого места. В вашем случае вы хотите называть 'loginWithFacebook()' в вашем 'btnFbLogin.onClick()'. Но вам нужно управлять состояниями входа/выхода из выпадающего/текста самостоятельно. –

Смежные вопросы