2011-04-16 21 views
6

Hey herkes kısa bir süre önce Facebook'ta oturum açan ve durum güncellemeyi deneyen ilk android uygulamamı geliştirdi. Aşağıdaki kod, yetki kodudur (fbook dev sitesinin kendisi üzerindeydi) ve yakın zamana kadar benim için iyi çalıştı. Artık benim uygulamamın emülatörümde iyi bir şekilde oturum açtığını, ancak APK dosyasını dışa aktardığımda ve telefonuma koyduğumda 'kimlik doğrulama hatası' verebiliyor. Birisi bunu açıklayabilir mi? Artık sadece giriş sayfasını göstermiyor, sonra oluşturdum yeni bir anahtar deposu ve hashkey VE her zamanki gibi facebook üzerindeki dev uygulama sayfamda hashkey'i güncellediFacebook Kimlik Doğrulama Emülatörde çalışıyor, Ama fiziksel aygıtta değil

Sanırım bu anahtarlıktan kaynaklanıyor, ama neyin yanlış olduğunu anlamaya yetecek kadar anlamadım. Ben, ihracat, uygulama tıklattıktan sonra yeni bir anahtar deposu (ilk kez, aksi halde varolan anahtar deposu kullanıyorum) oluşturuyorum, daha sonra "keytool exportcert" vb. Kullanarak benim hashkey'i fbook dev sitesinde gösteriyorum. benim facebook hesabına app.Ancak bazen anahtar deposu şifre doğru olsa bile, aynı app önce kullanmış olsam bile "keystore formatı" farklı olduğunu söylüyor! O zaman yeni bir anahtar deposu ve exp oluşturmak zorundayım tekrar orcert ve hepsi bir acıdır! Daha kolay bir yol olmalı?

Muhtemelen Facebook uygulamaları için hashkey'in nasıl çalıştığını açıklayabilir mi?

Şimdiden teşekkürler!

Benim Kimlik Doğrulama Kodu:

public void login() 
{ 

    facebook.authorize(this,new String[] { "email", "read_stream", "publish_stream"}, new DialogListener(){ 
     int fbcheck=0; 
     @Override 
     public void onComplete(Bundle values) { 
      fbcheck=1; 
     facebookauthcheck(fbcheck); 
     } 

     @Override 
     public void onFacebookError(FacebookError error) { 
      fbcheck=0; 
      facebookauthcheck(fbcheck); 
     } 

     @Override 
     public void onError(DialogError e) { 
     fbcheck=0; 
     facebookauthcheck(fbcheck); 
     } 

     @Override 
     public void onCancel() { 
      fbcheck=2; 
      facebookauthcheck(fbcheck); 
      } 

    }); 
} 

public void facebookauthcheck(int fbcheck) 
{ 
    if (fbcheck == 0) { 
     Toast.makeText(this, "Authentication Error", Toast.LENGTH_LONG).show(); 
    } 
    else if (fbcheck==1) 
    { 
     Toast.makeText(this, "Authenticated", Toast.LENGTH_LONG).show(); 
    } 
    else 
     Toast.makeText(this, "Authentication Cancelled", Toast.LENGTH_LONG).show(); 
} 

cevap

4

Evet ben bu konunun,

Bu emülatörünüzde iyi çalıştı benim dev telefon sorunsuz çalıştı, ama test kullanıcıları telefonda başarısız oldu.

Bu, Facebook uygulaması ve SSO ile ilgilidir. http://sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you/

Bu 3 çözümleri vardır:

bu bir okuma var.

Ben TOA yüzden İkinci seçenekte gitti çalışmaya alamadım, (SSO çıkabilirsiniz!) Şu şekilde yapılır:

facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, this); 

işe SSO düzeltmek ve almak istiyorsanız

:

Hata ayıklama apk sertifikası için karma anahtarınızı doğru şekilde oluşturun. (yukarıdaki bağlantıda ayrıntılı olarak açıklanmıştır).

Ref:

Corresponding SO Question

+0

Teşekkür beni kurtarmak bu iyi bir çözüm için ..,. – user1690588

+0

U da beni kurtardı, sihir gibi çalıştı! – TharakaNirmana

0

Ben 'bu' ile ('aktiviteyi' değiştiriniz) parçalarıyla facebook login kullanıyorum:

private void loginToFacebook() 
    { 
     mPrefs = activity.getPreferences(Context.MODE_PRIVATE); 
     facebook = new Facebook(APP_ID); 
     accessToken = mPrefs.getString("access_token", null); 
     long expires = mPrefs.getLong("access_expires", 0); 

     if (accessToken != null) 
     { 
      facebook.setAccessToken(accessToken); 
     } 

     if (expires != 0) 
     { 
      facebook.setAccessExpires(expires); 
     } 

     if (!facebook.isSessionValid()) 
     { 
      facebook.authorize(activity, new String[] {"publish_stream"}, Facebook.FORCE_DIALOG_AUTH, new DialogListener() { 

       public void onFacebookError(FacebookError arg0) { 
        // TODO Auto-generated method stub 

       } 

       public void onError(DialogError arg0) { 
        // TODO Auto-generated method stub 

       } 

       public void onComplete(Bundle arg0) { 
         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", facebook.getAccessToken()); 
         editor.putLong("access_expires", facebook.getAccessExpires()); 
         editor.commit();       
         uploadPhoto(facebook, bitmap, null); // calling another method to upload an image to FB after logging in..    
       } 

       public void onCancel() { 
        // TODO Auto-generated method stub 

       } 
      }); 

     } 
    } 
İlgili konular