2016-01-08 14 views
5

Android uygulamasında basit bir facebook girişini uygulamaya çalışıyorum. Giriş düğmesine bastığımda, uygulama kimlik bilgilerini girdikten sonra facebook sayfasına yönlendirilir, tekrar uygulamanıza geri döner. Ancak LoginButton geri arama işlevleri çağrılmaz. Buna benzer birkaç soru olsa da, ayrı bir parça sınıfı vardı. Ancak, ana etkinlikten her şeyi yapıyorum.Facebook Oturum AçButton geri arama çağrılmayan

package com.example.ankur.facebookdemo; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Toast; 

import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.FacebookSdk; 
import com.facebook.login.LoginResult; 
import com.facebook.login.widget.LoginButton; 

public class MainActivity extends AppCompatActivity { 
    private LoginButton loginButton; 
    CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 
     setContentView(R.layout.activity_main); 

     loginButton = (LoginButton) findViewById(R.id.login_button); 
     if (loginButton == null) { 
      Log.v("CheckLogin", "null"); 
     } 
     else { 
      Log.v("CheckLogin", "not null"); 
     } 


     loginButton.setReadPermissions("user_friends"); 

     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       // App code 
       Toast.makeText(getApplicationContext(),"Fb Login Success", Toast.LENGTH_LONG); 
       Log.v("CheckLogin", "successfully connected to facebook"); 
      } 

      @Override 
      public void onCancel() { 
       // App code 
       Toast.makeText(getApplicationContext(),"Fb on cancel",Toast.LENGTH_LONG); 
       Log.v("CheckLogin", " connection to facebook cancelled"); 

      } 

      @Override 
      public void onError(FacebookException exception) { 
       // App code 
       Toast.makeText(getApplicationContext(),"Fb Login Error",Toast.LENGTH_LONG); 
       Log.v("CheckLogin", "Error on connection to facebook"); 
      } 
     }); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
+0

FB'nin SDK'sının hangi bağımlı bağımlılığı ile? exmpl: facebookSDK = 'com.facebook.android:facebook-android-sdk:4.6.0' –

cevap

10

Sen onActivityResult() yöntemini geçersiz unuttum: şu benim kodudur. onActivityResult(), çağrılan geri arama yöntemleriyle sonuçlanır.

böyle bir şey yapın:

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

Umut bu yardımcı olur! tamamı

+0

Çok teşekkürler! Sorunu çözdü. –

+0

Merhaba Narayan, şimdi geri çekilme ile başka bir sorunum var. Kod, Başarıda onSuccess geri çağrısı çağırır, ancak çıkış düğmesine tıkladığımda onCancel çağrılmaz. Bunu başka bir soruya koymuştum: http://stackoverflow.com/questions/34978263/facebook-sdk-android-onsuccess-called-but-oncancel-not-called –

2

:) iyi Sen onActivityResult kanca eksik:

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

The documentation açıkça bildiren:

Eğer FacebookSDK Giriş veya Paylaş gerektiği ile entegre her faaliyeti ve parça callbackManager'a onActivityResult yönlendirme.

+0

Çok teşekkürler! Sorunu çözdü. –

+0

Veriler, niçin Parcelable olarak neyin mümkün olduğu ile niçin ek olarak verilir? – JPM