8

मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं। फेसबुक की ऑफ़लाइन_कैस अनुमति के आने वाले बहिष्कार के साथ मैं फेसबुक टोकन का विस्तार करने के लिए ग्राफ़ एपीआई का उपयोग करने की कोशिश कर रहा हूं।एंड्रॉइड ऐप में रीफ्रेश किए गए फेसबुक टोकन प्राप्त करने के लिए कोड क्या है?

 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 

किसी को भी विस्तृत कोड कैसे एक Android एप्लिकेशन में उपरोक्त कोड को लागू करने और प्राप्त ताजा फेसबुक टोकन के लिए यह दर्शाता है कि प्रदान कर सकते हैं?

अपने समय के लिए धन्यवाद।

अद्यतन दो:

प्रगति (मुझे लगता है कि)!

आधार URL में फेसबुक अनुरोध विधि परिणामों के साथ पूर्ण URL का उपयोग करना तो बजाय

यूआरएल की शुरुआत में जोड़ा जा रहा
String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken; 

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

का उपयोग करना चाहिए हालांकि मैं कर रहा हूँ अब प्रतिक्रिया प्राप्त हो रही है {"त्रुटि": {"message": "एप्लिकेशन को वैध करने में त्रुटि। अमान्य अनुप्रयोग आईडी।", "टाइप": "ओएथएक्सप्शन", "कोड": 1 9 0}}

अद्यतन एक:

यहां मैंने कोशिश की है। कोड पूरा हो जाता है, जो कि लिस्टरर पर ऑनकंपलेट कहा जाता है, लेकिन प्रतिक्रिया में एक नया एक्सेस टोकन या समाप्ति मान नहीं होता है।

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); 
    } 

यहाँ RefreshListener की मेरी संस्करण है ...

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

कोड पूरा करता है, कि listerner पर OnComplete है कहा जाता है, लेकिन जवाब एक नई पहुँच टोकन या समाप्ति मूल्य शामिल नहीं है। प्रतिक्रिया ...

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

जब मैं उसी यूआरएल (एक अक्षरांकीय वर्तमान टोकन मूल्य के साथ) एक वेब ब्राउज़र प्रतिक्रिया करता है एक पहुँच टोकन शामिल में डाल दिया है।


संबंधित जानकारी

फेसबुक के offline_access अनुमति 1 मई को बहिष्कृत कर दिया जाएगा, 2012

कृपया onResume में extendAccessTokenIfNeeded समारोह उपयोग करने का सुझाव नहीं है() के बजाय।I am also having trouble उस के साथ है और यह कारण है कि मैं ग्राफ़ API टोकन ताज़ा :-)

संबंधित स्टैक ओवरफ़्लो सवालों

Is it possible to extend Facebook tokens with extendAccessTokenIfNeeded in an Android app? (मेरे सवाल)

How would offline_access work after deprecation after May 1st?

में देख रहा हूँ

Facebook access token can not be extended

Protecting app secret for extendAccessToken usage (Java/Android)

प्रासंगिक फेसबुक लिंक

Facebook Android Tutorial

Facebook offline_access permission deprecation

+0

उपरोक्त सभी लिंक के साथ, आपको और अधिक विस्तृत जानकारी क्यों चाहिए? ऐसा लगता है कि आपके पास इसे लागू करने के लिए पर्याप्त दस्तावेज हैं .. – Shreeni

+0

आपको लगता है कि मैं इसे काम कर सकता हूं, लेकिन नहीं। :-(स्टैक ओवरफ़्लो पर सभी आसान प्रश्नों को पूरी तरह उत्तर दिया जाता है, इसलिए मुझे लगता है कि यह उतना आसान नहीं है जितना पहले लगता है ... – Mel

उत्तर

7

ईमानदारी से कहूं तो मैं थोड़ा उलझन में हूँ - लगता है कि आप सब कुछ है यह किया जाना है - और यह आसान है । लेकिन मुझे अपने प्रश्न का उत्तर देने की कोशिश करें।

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); 
} 

आशा व्यक्त की कि मदद करता है, और जावा में इस अनुवाद सरल होना चाहिए: यहाँ मेरी सी # परियोजना, जहां मैं इस मामले में मेरी टिप्पणी के साथ एप्लिकेशन की टोकन का विस्तार से कोड आप सी # भाषाओं और कक्षाओं से परिचित नहीं हैं है।

+0

हाय आपकी प्रतिक्रिया के लिए धन्यवाद। मैं खुद को भ्रमित कर रहा हूं! मुझे जो बताया गया है वह है एक आसान काम एंड्रॉइड डेवलपर्स से कोई प्रतिक्रिया नहीं मिल रहा है - 100 बिंदु बक्षीस के साथ भी! मेरी कोडिंग समस्या यह है कि फेसबुक की प्रतिक्रिया में एक्सेस कुंजी नहीं है। हालांकि, जब मैं सिर्फ ब्राउज़र में पूरा यूआरएल डालता हूं तो मुझे मिलता है एक एक्सेस कुंजी। मैंने अपने पिछले प्रयासों को शामिल करने के लिए अपना जवाब अपडेट कर दिया है। – Mel

+0

मैंने तुरंत देखा कि आपने अपने रिफ्रेश लिस्टनर में JSON को पार्स किया है - लेकिन यह गलत है, मुझे विश्वास है। आपको JSON वापस नहीं मिल रहा है, बल्कि सिर्फ एक कच्ची स्ट्रिंग है। आप ब्राउज़र में "स्ट्रिंग रीफ्रेश यूआरएल" का मान पेस्ट करते हैं, क्या आपको उचित टोकन मिल जाएगा? क्या आप 100% सुनिश्चित हैं कि आप अनुरोध (POST के बजाय) कर रहे हैं? इसके अलावा - क्या आपके पास AsyncFacebookRunner के स्रोत हैं? क्या आप यह पता लगा सकते हैं कि वास्तव में यह कहां है HTTP अनुरोध भेजता है - और सटीक यूआरएल लॉग करें , HTTP विधि वहाँ? इसके अलावा - यदि आप AsyncFacebookRunner का उपयोग नहीं करते हैं, लेकिन केवल मानक HTTP अनुरोध घटक - क्या यह काम करेगा? – avs099

+0

धन्यवाद, मैं प्रगति कर रहा हूं ... जब मैं एसडीके के Util.java कोड में कोड बदलता हूं (जो वर्ग वास्तव में http अनुरोध करता है) मैं ब्राउज़र में एक पता टाइप करने के समान प्रतिक्रिया प्राप्त करना शुरू करता हूं। लेकिन अब मुझे एहसास है कि समाप्ति आंकड़ा बहुत छोटा है (5143168)। जब मैं ताज़ा करता हूं तो आंकड़ा हमेशा घटता है ... इस पर कोई विचार? प्रतिक्रिया उदाहरण ... ACCESS_TOKEN = AAAEparERUxABAFSPLEI8VNAwo8FLsxOpR6bZAgyeRxj0JAtGBBqMv5y3gnMkvy0TMCrnKuF0Jp6S1DSpiO8mmiy3JMBV2XZASAimYwZDZD और समाप्त हो रहा है = 5,143,168 – Mel

संबंधित मुद्दे