8

Android uygulaması geliştiriyorum. Facebook'un offline_access izninin yaklaşan kullanımdan kaldırılmasıyla Facebook simgesini kullanmaya devam etmek için Graph API'yi kullanmaya çalışıyorum.Bir Android uygulamasında yenilenen bir Facebook belirteci almak için kod nedir?

 https://graph.facebook.com/oauth/access_token?    
     client_id=APP_ID& 
     client_secret=APP_SECRET& 
     grant_type=fb_exchange_token& 
     fb_exchange_token=EXISTING_ACCESS_TOKEN 

herkes nasıl bir android app içine yukarıdaki kod uygulamak ve tazelenmiş Facebook belirteç elde etmek gösteren ayrıntılı bir kod sağlayabilir mi?

Zaman ayırdığınız için teşekkür ederiz.

Güncelleme İki:

İlerleme (Bence)! temel URL'de facebook istek yöntemi sonuçları ile tam URL'yi kullanarak

String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken; 

Ancak ben

String refreshUrl = "oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken; 

kullanmalıdır URL'ye başında Yani yerine

eklenen şimdi yanıtı alıyoruz {"error": {"message": "Uygulama doğrulanırken hata oluştu. Geçersiz uygulama kimliği.", "type": "OAuthException", "code": 190}}

Güncelleştirme One:

Denediğim şey burada. Kod tamamlanır, yani listerner üzerinde OnComplete çağrılır, ANCAK yanıt yeni bir erişim belirteci veya son kullanma değeri içermez.

void refreshWithGraph() { 
     AsyncFacebookRunner extendingAsyncRunner = new AsyncFacebookRunner(facebook); 
     Bundle parameters = new Bundle(); 

     //the variable currentAccessToken is obtained after authorisation is complete using currentAccessToken = facebook.getAccessToken(); 

     String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken; 


    extendingAsyncRunner.request(refreshUrl, parameters, new RefreshListener(), null); 
    } 

İşte o denir listerner üzerinde onComplete olduğunu

//REFRESH LISTENER 
    public class RefreshListener extends BaseRequestListener { 

     public void onComplete(final String response, Object state) { 


      try { 
       final JSONObject json = Util.parseJson(response); 

       runOnUiThread(new Runnable() { 

        @Override 
        public void run() {    
         tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE\nResponse is " + response); 
         tvRefreshToken.setText("IN REFRESH LISTENER ONCOMPLETE\nToken is " + facebook.getAccessToken()); 
         tvRefreshExpiry.setText("IN REFRESH LISTENER ONCOMPLETE\nFacebook expiry is " + millisecToDate(facebook.getAccessExpires())); 

        } 

       }); //end runOnUiThread 



      } catch (JSONException e) { 
       runOnUiThread(new Runnable() { 

          @Override 
          public void run() { 
           tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE CAUGHT JSON EXCEPTION \nResponse is " + response); 

          } 

         }); //end runOnUiThread 

      } catch (FacebookError fe) { 
       runOnUiThread(new Runnable() { 


          @Override 
          public void run() { 
           tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE CAUGHT FACEBOOK ERROR \nResponse is " + response); 

          } 

         }); //end runOnUiThread 
      } //end catch Facebook error 

     } //end onComplete 


     @Override 
     public void onIOException(IOException e, Object state) { 
      tvRefreshResponse.setText("IN REFRESH LISTENER IOEXCEPTION \nException is "+ e.getLocalizedMessage()); 

     } 

     @Override 
     public void onFileNotFoundException(FileNotFoundException e, Object state) { 
      tvRefreshResponse.setText("IN REFRESH LISTENER FILE NOT FOUND EXCEPTION \nException is "+ e.getLocalizedMessage()); 
     } 

     @Override 
     public void onMalformedURLException(MalformedURLException e, Object state) { 
      tvRefreshResponse.setText("IN REFRESH MALFORMED URL \nException is "+ e.getLocalizedMessage()); 

     } 

     @Override 
     public void onFacebookError(FacebookError e, Object state) { 
      tvRefreshResponse.setText("IN REFRESH ONFACEBOOK ERROR \nException is "+ e.getLocalizedMessage()); 

     } 
    } //end RefreshListener 

kod tamamlar ... RefreshListener benim sürümüdür ANCAK yanıtı yeni bir erişim belirteci veya son kullanma değer içermiyor. Ben tepki bir erişim kodu şu YAPAR bir web tarayıcısına (bir alfanümerik akım belirteç değeri ile) aynı URL koyduğunuzda yanıtı ...

{"id":"https:\/\/graph.facebook.com\/oauth\/access_token","shares":78,"comments":1} 

olduğunu.


İlgili Bilgiler

Facebook'un offline_access izni 2012

onResume içinde extendAccessTokenIfNeeded işlevini kullanarak önermek etmeyiniz() yerine, 1 Mayıs günü kaldırılacaktır.Bununla I am also having trouble ve ben

İlgili yığın taşması

Is it possible to extend Facebook tokens with extendAccessTokenIfNeeded in an Android app? (benim sorum)

How would offline_access work after deprecation after May 1st?

Soruları Graph API jetonu ferahlatıcı :-) inceliyorum nedeni budur

Facebook access token can not be extended

Protecting app secret for extendAccessToken usage (Java/Android)

İlgili Facebook Dürüst olmak gerekirse

Facebook Android Tutorial

Facebook offline_access permission deprecation

+0

Yukarıdaki tüm bağlantılarla, neden daha ayrıntılı bilgiye ihtiyacınız var? Bunu uygulamak için yeterli belgeleriniz var gibi görünüyor .. – Shreeni

+0

Bunu yapabileceğimi düşünürdüm, ama hayır. :-(Yığın Taşması ile ilgili tüm kolay soru çok hızlı bir şekilde tam olarak cevaplandırılır bu yüzden sanki ilk bakışta bu kadar kolay değil sanırım ... – Mel

cevap

7

bağlantılar, biraz karıştı değilim - Eğer halletmek için her şeye sahip gibi görünüyor - ve çok basit . Ama sorunuzu cevaplamaya çalışmama izin verin. yardımcı olur

string currentToken = "token from somewhere"; 

// WebClient is used to send GET request to the given URL 
// and receive the response 
using (var req = new System.Net.WebClient()) 
{ 
    // create URL string and fill it in with data (app Id, secret, and current token) 
    var extendTokenUrl = string.Format(
     "https://graph.facebook.com/oauth/access_token?client_id={0}&client_secret={1}&grant_type=fb_exchange_token&fb_exchange_token={2}", 
     FB_APP_ID, 
     FB_APP_SECRET, 
     currentToken); 

    // send GET request and download the response 
    var response = req.DownloadString(extendTokenUrl); 

    // if all is good, response will be a string which looks like this: 
    // access_token=<<THE TOKEN GOES HERE>> 
    var newToken = response.Substring("access_token=".Length); 

    // now save newToken in your DB INSTEAD of currentToken - 
    // so all calls will be made with extended token 
    SaveTokenInDB(newToken); 
} 

umut ve Java içine bu tercüme basit olmalıdır: Burada C# dilleri ve sınıflar aşina olmayan ben durumda benim yorumlarla uygulamanın belirteci uzatmak benim C# projeden kodudur.

+0

Merhaba cevabınız için teşekkür ederim. kolay bir iş Android geliştiricilerinden yanıt alamıyor - 100 puanlık ödülle bile! Kodlama problemim Facebook'tan gelen yanıtın bir erişim anahtarı içermemesidir.Ancak, tüm URL'yi bir tarayıcıya koyduğumda Bir erişim anahtarı.Adım denememi dahil etmek için cevabımı güncelledim – Mel

+0

Hemen fark ettim ki, JSON'u RefreshListener'ınızda ayrıştırıyorsunuz - ama bu yanlış, inanıyorum. JSON'u geri almıyorsunuz ama sadece bir ham string. tarayıcıda "String refreshUrl" değerini yapıştırırsanız, uygun jetonu alacak mısınız?% 100 emin GET isteği (POST yerine) yapıyor musunuz? Ayrıca - AsyncFacebookRunner için kaynakları var mı? HTTP isteği gönderir ve tam URL'yi günlüğe kaydeder , HTTP yöntemi var mı? Ayrıca - AsyncFacebookRunner'ı kullanmıyorsanız, sadece standart HTTP isteği bileşenini kullanırsanız - işe yarayacak mı? – avs099

+0

Teşekkür ederim, ilerleme kaydediyorum ... SDK'nın Util.java kodundaki kodu değiştirdiğimde (aslında http isteğini yapan sınıf), tarayıcıda bir adres yazmakla aynı yanıtı almaya başladım. Ama şimdi son kullanma rakamının çok küçük olduğunu biliyorum (5143168). Şekilyi yenilediğimde her zaman azalır ... Bu konuda herhangi bir fikrin var mı? Yanıt örneği ... access_token = AAAEparERUxABAFSPLEI8VNAwo8FLsxOpR6bZAgyeRxj0JAtGBBqMv5y3gnMkvy0TMCrnKuF0Jp6S1DSpiO8mmiy3JMBV2XZASAimYwZDZD & expires = 5143168 – Mel

İlgili konular