2017-01-17 37 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

是的,臉譜網安裝在我的設備上 – 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()'。但是你需要自己管理可繪製/文本的登錄/註銷狀態。 –