दिलचस्प पोस्ट
आपके प्रमाणीकरण एजेंट से कोई कनेक्शन नहीं खोला जा सका JLabel में बहुभाषी पाठ नवीनतम एफबीएसडीके के साथ आईओएस ऐप में सफ़ारी ब्राउज़र को अनुप्रेषित किए बिना फेसबुक को कैसे एकीकृत किया जाए सी # में अपवाद कितना महंगा है? JSON.stringify का उपयोग करते हुए त्रुटि को स्ट्रिंग करना संभव नहीं है? Cmake चर पुनरावर्ती सेट है? डायनामिक काम कैसे टाइप करता है और इसका इस्तेमाल कैसे किया जाता है? वीएस2013 में संदर्भ की संख्या को कैसे छुपाना है? मेरे आने वाले Django अनुरोध में मेरा JSON डेटा कहां है? java.lang.NoClassDefFound त्रुटि: org / hamcrest / सेल्फ डिस्क्रिप्टिंग किसी भी फैंसीबॉक्स बॉक्स पर सीधा लिंक कैसे बनाएं .bat फ़ाइल के लिए कस्टम टी कमांड का उपयोग करना उसी कोड को ifconfig के रूप में प्राप्त करने के लिए सी कोड का उपयोग करना AngularJS संसाधन वादा कैसे कमांड लाइन में कई जावा स्रोत फ़ाइलों को संकलित करने के लिए

फेसबुक ग्राफ़ एपीआई v2.0 + – / मी / दोस्त खाली, या केवल मेरे आवेदन का उपयोग करने वाले दोस्त हैं

मैं ग्राफ़ एपीआई v2.0 के साथ अपना मित्र नाम और आईडी प्राप्त करने की कोशिश कर रहा हूं, लेकिन डेटा रिक्त है:

{ "data": [ ] } 

जब मैं v1.0 का उपयोग कर रहा था, तो निम्न अनुरोध के साथ सब कुछ ठीक था:

 FBRequest* friendsRequest = [FBRequest requestForMyFriends]; [friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary* result, NSError *error) { NSArray* friends = [result objectForKey:@"data"]; NSLog(@"Found: %i friends", friends.count); for (NSDictionary<FBGraphUser>* friend in friends) { NSLog(@"I have a friend named %@ with id %@", friend.name, friend.id); } }]; 

लेकिन अब मुझे दोस्त नहीं मिल सकता है!

वेब के समाधान से एकत्रित समाधान "फेसबुक ग्राफ़ एपीआई v2.0 + – / मी / दोस्त खाली, या केवल मेरे आवेदन का उपयोग करने वाले दोस्त हैं"

ग्राफ़ एपीआई के v2.0 में, कॉलिंग /me/friends फ्रोट्स उस व्यक्ति के मित्र को लौटते हैं जो ऐप का भी इस्तेमाल करते हैं।

इसके अतिरिक्त, v2.0 में, आपको प्रत्येक उपयोगकर्ता से user_friends अनुमति का अनुरोध करना होगा। user_friends अब हर लॉगिन में डिफ़ॉल्ट रूप से शामिल नहीं है प्रत्येक उपयोगकर्ता को उपयोगकर्ता /me/friends के जवाब में प्रकट होने के लिए उपयोगकर्ता की स्वीकृति देनी होगी। अधिक विस्तृत जानकारी के लिए फेसबुक अपग्रेड मार्गदर्शिका देखें या नीचे दिए गए सारांश की समीक्षा करें।

यदि आप गैर-ऐप्लिकेशन-उपयोग करने वाले मित्रों की सूची तक पहुंचना चाहते हैं, तो दो विकल्प हैं:

  1. यदि आप अपने लोगों को अपने दोस्तों को अपने ऐप का उपयोग करके फेसबुक पर प्रकाशित कहानियों में टैग करने देना चाहते हैं , तो आप /me/taggable_friends API का उपयोग कर सकते हैं इस समापन बिंदु का उपयोग करने के लिए फेसबुक की समीक्षा की आवश्यकता है और उस मामले के लिए उपयोग किया जाना चाहिए, जहां आप अपने मित्रों को एक पद में टैग करने के लिए दोस्तों की एक सूची प्रदान कर रहे हैं।

  2. यदि आपका ऐप एक गेम है और आपका गेम फेसबुक कैनवस का समर्थन करता है , तो आप एक कस्टम आमंत्रण संवाद प्रस्तुत करने के लिए /me/invitable_friends अंत बिंदु का उपयोग कर सकते हैं, फिर मानक अनुरोध संवाद में इस एपीआई द्वारा दिए गए टोकन को पास करें ।

अन्य मामलों में, ऐप्स अब किसी उपयोगकर्ता के मित्रों की पूरी सूची को प्राप्त करने में सक्षम नहीं हैं (केवल उन्हीं मित्र जिन्होंने उपयोगकर्ता की user_friends अनुमति के उपयोग से विशेष रूप से आपके ऐप को अधिकृत किया है)। फेसबुक द्वारा इसकी पुष्टि 'डिजाइन द्वारा' के रूप में की गई है।

चाहने वाले ऐप्स लोगों को ऐप का उपयोग करने के लिए दोस्तों को आमंत्रित करने की इजाजत देता है, आप अभी भी वेब पर वाक्ड संवाद या IOS और Android पर नया संदेश संवाद का उपयोग कर सकते हैं।

अद्यतन करें: फेसबुक ने इन परिवर्तनों के बारे में यहां एक अकसर किये गए सवाल प्रकाशित किए हैं: https://developers.facebook.com/docs/apps/faq जो दोस्तों को आमंत्रित करने के लिए डेवलपर्स के लिए उपलब्ध सभी विकल्प समझाते हैं।

यद्यपि शमौन क्रॉस का जवाब स्वीकार किया गया है और सही है, मैंने सोचा था कि मैं इसे एक उदाहरण (एंड्रॉइड) के साथ थोड़ा सा गोमांस देगा जो कि किया जाना चाहिए। मैं इसे सामान्य रूप में रखता हूं, जैसा कि मैं कर सकता हूं और केवल सवाल पर ध्यान केंद्रित कर रहा हूं। निजी तौर पर मैं एक डाटाबेस में चीज़ों को संग्रहीत करने के लिए जख्मी कर देता हूं ताकि लोडिंग आसान हो, लेकिन इसमें कर्सर एडाप्टर और कंटेंटप्राइवर की आवश्यकता होती है, जो कि यहाँ से बाहर की गुंजाइश है।

मैं खुद यहां आया और फिर सोचा, अब क्या ?!

समस्या

बस उपयोगकर्ता 3594351 की तरह, मैं देख रहा था कि मित्र डेटा रिक्त था। मुझे FriendPickerFragment का उपयोग करके इसे मिला। तीन महीने पहले क्या काम किया, अब काम नहीं करेगा यहां तक ​​कि फेसबुक का उदाहरण तोड़ दिया। तो मेरी समस्या थी 'मैं हाथ से मित्र पिक्चर फ्रेग्मेंट कैसे बनाऊं?

क्या काम नहीं किया

साइमन क्रॉस से विकल्प # 1 एप के मित्रों को आमंत्रित करने के लिए पर्याप्त मजबूत नहीं था साइमन क्रॉस ने अनुरोध संवाद की भी सिफारिश की, लेकिन यह केवल एक समय में 5 अनुरोधों की अनुमति देगा। किसी भी दिए गए फेसबुक सत्र के दौरान अनुरोध संवाद ने एक ही मित्र को दिखाया। उपयोगी नहीं।

क्या काम किया (सारांश)

कुछ कठिन परिश्रम के साथ विकल्प # 2 आपको सुनिश्चित करना होगा कि आप फेसबुक के नए नियमों को पूरा करते हैं: 1.) आप एक गेम हैं। 2. आपके पास एक कैनवास ऐप (वेब ​​उपस्थिति) है 3.) आप ऐप Facebook के साथ पंजीकृत हैं सभी सेटिंग्स के तहत फेसबुक डेवलपर वेबसाइट पर किया।

अपने ऐप के अंदर हाथ से दोस्त पिकर का अनुकरण करने के लिए मैंने निम्नलिखित किया:

  1. एक टैब गतिविधि बनाएं, जो दो टुकड़े दिखाती है। प्रत्येक टुकड़ा एक सूची दिखाती है उपलब्ध मित्र (/ मुझे / दोस्तों) के लिए एक टुकड़ा और दूसरे को आमंत्रित मित्रों (/ me / invitable_friends) के लिए दोनों टैब को प्रस्तुत करने के लिए एक ही टुकड़ा कोड का उपयोग करें
  2. एक एसिंक टास्क बनाएं जो फेसबुक से मित्र डेटा प्राप्त करेगा। एक बार वह डेटा लोड हो जाने पर, इसे अडैप्टर पर टॉस करें जो स्क्रीन पर मान प्रस्तुत करेगा।

विवरण

AsynchTask

 private class DownloadFacebookFriendsTask extends AsyncTask<FacebookFriend.Type, Boolean, Boolean> { private final String TAG = DownloadFacebookFriendsTask.class.getSimpleName(); GraphObject graphObject; ArrayList<FacebookFriend> myList = new ArrayList<FacebookFriend>(); @Override protected Boolean doInBackground(FacebookFriend.Type... pickType) { // //Determine Type // String facebookRequest; if (pickType[0] == FacebookFriend.Type.AVAILABLE) { facebookRequest = "/me/friends"; } else { facebookRequest = "/me/invitable_friends"; } // //Launch Facebook request and WAIT. // new Request( Session.getActiveSession(), facebookRequest, null, HttpMethod.GET, new Request.Callback() { public void onCompleted(Response response) { FacebookRequestError error = response.getError(); if (error != null && response != null) { Log.e(TAG, error.toString()); } else { graphObject = response.getGraphObject(); } } } ).executeAndWait(); // //Process Facebook response // // if (graphObject == null) { return false; } int numberOfRecords = 0; JSONArray dataArray = (JSONArray) graphObject.getProperty("data"); if (dataArray.length() > 0) { // Ensure the user has at least one friend ... for (int i = 0; i < dataArray.length(); i++) { JSONObject jsonObject = dataArray.optJSONObject(i); FacebookFriend facebookFriend = new FacebookFriend(jsonObject, pickType[0]); if (facebookFriend.isValid()) { numberOfRecords++; myList.add(facebookFriend); } } } //make sure there are records to process if (numberOfRecords > 0){ return true; } else { return false; } } @Override protected void onProgressUpdate(Boolean... booleans) { //no need to update this, wait until the whole thread finishes. } @Override protected void onPostExecute(Boolean result) { if (result) { /* User the array "myList" to create the adapter which will control showing items in the list. */ } else { Log.i(TAG, "Facebook Thread unable to Get/Parse friend data. Type = " + pickType); } } } 

FacebookFriend वर्ग मैं बनाया

 public class FacebookFriend { String facebookId; String name; String pictureUrl; boolean invitable; boolean available; boolean isValid; public enum Type {AVAILABLE, INVITABLE}; public FacebookFriend(JSONObject jsonObject, Type type) { // //Parse the Facebook Data from the JSON object. // try { if (type == Type.INVITABLE) { //parse /me/invitable_friend this.facebookId = jsonObject.getString("id"); this.name = jsonObject.getString("name"); //Handle the picture data. JSONObject pictureJsonObject = jsonObject.getJSONObject("picture").getJSONObject("data"); boolean isSilhouette = pictureJsonObject.getBoolean("is_silhouette"); if (!isSilhouette) { this.pictureUrl = pictureJsonObject.getString("url"); } else { this.pictureUrl = ""; } this.invitable = true; } else { //parse /me/friends this.facebookId = jsonObject.getString("id"); this.name = jsonObject.getString("name"); this.available = true; this.pictureUrl = ""; } isValid = true; } catch (JSONException e) { Log.w("#", "Warnings - unable to process FB JSON: " + e.getLocalizedMessage()); } } } 

फेसबुक ने अपनी नीतियों को अब संशोधित किया है यदि आपके ऐप में एक कैनवास कार्यान्वयन नहीं है और यदि आपका ऐप गेम नहीं है तो आप पूरी तरह से मित्रता प्राप्त नहीं कर सकते। बेशक, टैगगैबल_फ्रेंड भी हैं, लेकिन यह केवल टैगिंग के लिए है

आप उन मित्रों की सूची को खींच कर पाएंगे जिन्होंने केवल ऐप को अधिकृत किया है

आलेख एपीआई 1.0 का प्रयोग कर रहे ऐप्स 30 अप्रैल 2015 तक काम करेंगे और उसके बाद यह नापसंद हो जाएगा।

इस पर अधिक जानकारी प्राप्त करने के लिए नीचे दिए गए लिंक देखें

https://developers.facebook.com/docs/graph-api/reference/v2.2/user/friends

https://developers.facebook.com/docs/apps/faq#invite_to_app

उम्मीद है की यह मदद करेगा

जैसे साइमन ने उल्लेख किया है, यह नई फेसबुक एपीआई में संभव नहीं है। शुद्ध तकनीकी तौर पर आप इसे ब्राउज़र ऑटोमेशन के माध्यम से कर सकते हैं।

  • यह फेसबुक नीति के खिलाफ है, इसलिए देश पर निर्भर करता है जहां आप रहते हैं यह कानूनी नहीं हो सकता है
  • आपको अपने क्रेडेंशियल्स का उपयोग करना होगा / उपयोगकर्ता को क्रेडेंशियल्स के लिए पूछें और संभवत: उन्हें संचित कराना होगा (पासवर्ड संग्रहीत करना भी समरूप रूप से एन्क्रिप्टेड एक अच्छा विचार नहीं है)
  • जब फेसबुक अपना एपीआई बदलता है, तो आपको ब्राउज़र ऑटोमेशन कोड को भी अपडेट करना होगा (यदि आप अपने एप्लिकेशन के अपडेट को बल नहीं दे सकते, तो आपको ब्राउज़र ऑटोमेशन टुकड़ा को वेबसाइजर के रूप में रखना चाहिए)
  • यह ओअथ अवधारणा को दरकिनार कर रहा है
  • दूसरी तरफ मेरा लग रहा है कि मैं अपने दोस्तों की सूची सहित अपने डेटा के मालिक हूँ और एफबी मुझे उन एपीआई के माध्यम से पहुँचने से प्रतिबंधित नहीं होना चाहिए

WatiN का उपयोग करते हुए नमूना कार्यान्वयन

 class FacebookUser { public string Name { get; set; } public long Id { get; set; } } public IList<FacebookUser> GetFacebookFriends(string email, string password, int? maxTimeoutInMilliseconds) { var users = new List<FacebookUser>(); Settings.Instance.MakeNewIeInstanceVisible = false; using (var browser = new IE("https://www.facebook.com")) { try { browser.TextField(Find.ByName("email")).Value = email; browser.TextField(Find.ByName("pass")).Value = password; browser.Form(Find.ById("login_form")).Submit(); browser.WaitForComplete(); } catch (ElementNotFoundException) { // we're already logged in } browser.GoTo("https://www.facebook.com/friends"); var watch = new Stopwatch(); watch.Start(); Link previousLastLink = null; while (maxTimeoutInMilliseconds.HasValue && watch.Elapsed.TotalMilliseconds < maxTimeoutInMilliseconds.Value) { var lastLink = browser.Links.Where(l => l.GetAttributeValue("data-hovercard") != null && l.GetAttributeValue("data-hovercard").Contains("user.php") && l.Text != null ).LastOrDefault(); if (lastLink == null || previousLastLink == lastLink) { break; } var ieElement = lastLink.NativeElement as IEElement; if (ieElement != null) { var htmlElement = ieElement.AsHtmlElement; htmlElement.scrollIntoView(); browser.WaitForComplete(); } previousLastLink = lastLink; } var links = browser.Links.Where(l => l.GetAttributeValue("data-hovercard") != null && l.GetAttributeValue("data-hovercard").Contains("user.php") && l.Text != null ).ToList(); var idRegex = new Regex("id=(?<id>([0-9]+))"); foreach (var link in links) { string hovercard = link.GetAttributeValue("data-hovercard"); var match = idRegex.Match(hovercard); long id = 0; if (match.Success) { id = long.Parse(match.Groups["id"].Value); } users.Add(new FacebookUser { Name = link.Text, Id = id }); } } return users; } 

इस दृष्टिकोण के कार्यान्वयन के साथ प्रोटोटाइप (सी # / वाटीन का उपयोग करते हुए) https://github.com/svejdo1/ShadowApi देखें यह फेसबुक कनेक्टर के डायनामिक अपडेट की अनुमति भी देता है जो आपके संपर्कों की सूची को पुनः प्राप्त कर रहा है।

अपने जावास्क्रिप्ट कोड का उपयोग करके / me / taggable_friends? Limit = 5000 आज़माएं

या

ग्राफ एपीआई का प्रयास करें

https://graph.facebook.com/v2.3/user_id_here/taggable_friends?access_token=

मज़े करो

FBSDKGraphAPI v2.0 या इसके बाद के संस्करण में, आपको FB लॉगिन के समय प्रत्येक उपयोगकर्ता से user_friends की अनुमति का अनुरोध करना चाहिए। यूजर_फ्रेंड हर लॉगिन में डिफ़ॉल्ट रूप से शामिल नहीं है, हमें इसे जोड़ना होगा प्रत्येक उपयोगकर्ता को उपयोगकर्ता / मित्र / दोस्तों के जवाब में प्रकट होने के लिए उपयोगकर्ता की स्वीकृति देनी होगी

  let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() fbLoginManager.loginBehavior = FBSDKLoginBehavior.web fbLoginManager.logIn(withReadPermissions: ["email","user_friends","public_profile"], from: self) { (result, error) in if (error == nil){ let fbloginresult : FBSDKLoginManagerLoginResult = result! if fbloginresult.grantedPermissions != nil { if(fbloginresult.grantedPermissions.contains("email")) { // Do the stuff }else { } }else { } } } 

तो एफबी लॉगिन के समय, यह स्क्रीन पर सभी अनुमतियां शामिल होती है यहां छवि विवरण दर्ज करें

यदि उपयोगकर्ता जारी रखें बटन दबाएं, तो अनुमतियां सेट हो जाएंगी। जब आप FBGraphAPI का उपयोग करके मित्र सूची में प्रवेश करते हैं, तो आपके मित्र जो उपरोक्त के रूप में आवेदन में लॉग इन करेंगे सूचीबद्ध होंगे

  if((FBSDKAccessToken.current()) != nil){ FBSDKGraphRequest(graphPath: "/me/friends", parameters: ["fields" : "id,name"]).start(completionHandler: { (connection, result, error) -> Void in if (error == nil){ print(result!) } }) } 

आउटपुट में उन उपयोगकर्ताओं को शामिल किया जाएगा जो फेसबुक के माध्यम से आपके आवेदन में प्रवेश के समय उपयोगकर्ता की स्वीकृति प्रदान करते हैं

 { data = ( { id = xxxxxxxxxx; name = "xxxxxxxx"; } ); paging = { cursors = { after = xxxxxx; before = xxxxxxx; }; }; summary = { "total_count" = 8; }; }