กราฟ Facebook API v2.0 + - / me / เพื่อนกลับว่างเปล่าหรือเฉพาะเพื่อนที่ใช้แอปพลิเคชันของฉันด้วย


366

ฉันพยายามรับชื่อเพื่อนและรหัสด้วย Graph API 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);
    }
}];

แต่ตอนนี้ฉันไม่สามารถรับเพื่อนได้!


ที่เป็นไปได้ที่จะเอาชนะปัญหานี้ stackoverflow.com/a/25584013/2529087
java.quaso

คำตอบ:


627

ใน v2.0 ของกราฟ API การโทร/me/friendsจะส่งคืนเพื่อนของบุคคลที่ใช้แอป

นอกจากนี้ใน v2.0 คุณต้องขอuser_friendsอนุญาตจากผู้ใช้แต่ละคน user_friendsไม่รวมอยู่ในค่าเริ่มต้นในทุกการเข้าสู่ระบบ ผู้ใช้แต่ละคนจะต้องให้สิทธิการได้รับอนุญาตในการสั่งซื้อที่จะปรากฏในการตอบสนองต่อuser_friends /me/friendsดูคู่มือการอัปเกรด Facebookสำหรับข้อมูลรายละเอียดเพิ่มเติมหรือตรวจสอบข้อมูลสรุปด้านล่าง

หากคุณต้องการเข้าถึงรายชื่อเพื่อนที่ไม่ได้ใช้แอปมีสองตัวเลือก:

  1. หากคุณต้องการให้คนของคุณแท็กเพื่อนในเรื่องที่พวกเขาเผยแพร่ไปยัง Facebook โดยใช้แอพของคุณคุณสามารถใช้/me/taggable_friendsAPI การใช้จุดปลายนี้ต้องมีการตรวจทานโดย Facebookและควรใช้สำหรับกรณีที่คุณแสดงรายชื่อเพื่อนเพื่อให้ผู้ใช้แท็กพวกเขาในโพสต์

  2. หากแอพของคุณเป็นเกมและเกมของคุณรองรับ Facebook Canvasคุณสามารถใช้/me/invitable_friendsจุดปลายเพื่อแสดงข้อความเชิญที่กำหนดเองจากนั้นส่งโทเค็นที่ส่งคืนโดย API นี้ไปยังกล่องโต้ตอบคำขอมาตรฐาน

ในกรณีอื่น ๆ แอพจะไม่สามารถเรียกคืนรายชื่อเพื่อนทั้งหมดของผู้ใช้ได้อีกต่อไป (เฉพาะเพื่อนที่ได้รับอนุญาตให้ใช้แอพของคุณโดยใช้user_friendsสิทธิ์เท่านั้น) สิ่งนี้ได้รับการยืนยันจาก Facebook ว่า 'โดยการออกแบบ'

สำหรับแอปที่ต้องการให้คนที่จะเชิญเพื่อนที่จะใช้แอปคุณจะยังคงสามารถใช้ส่งโต้ตอบบนเว็บหรือใหม่โต้ตอบข้อความบน iOSและAndroid

อัปเดต: Facebook ได้เผยแพร่คำถามที่พบบ่อยเกี่ยวกับการเปลี่ยนแปลงเหล่านี้ที่นี่: https://developers.facebook.com/docs/apps/faqซึ่งอธิบายตัวเลือกทั้งหมดที่มีให้กับนักพัฒนาเพื่อเชิญเพื่อน ๆ เป็นต้น


มีข่าวอะไรบ้างที่คุณแก้ไขครั้งล่าสุดหรือเราอยู่ในหน้าเดียวกัน?
Ilya Gazman

ไม่สามารถดูtaggable_friendsในรายการสำหรับการส่งรีวิว
AlikElzin-kilaka

7
ฉันไม่สามารถเข้าใจว่าทำไมพวกเขาถึงต้อง จำกัด มันมากขนาดนี้ ฉันหมายถึงระบบเก่านั้นใช้งานไม่ได้ แต่ก็ใช้งานไม่ได้ การดูโปรไฟล์สาธารณะของเพื่อน ๆ ทุกคนของคุณจะไม่ใช่ปัญหาความเป็นส่วนตัว ถ้าคุณไม่คิดว่าการเชื่อมต่อของมิตรภาพนั้นเป็นเรื่องส่วนตัว (แต่มากกว่านั้นทำไมมันไม่ได้อยู่ในกรณีของเพื่อนที่แท็กได้) นี่ไม่ใช่การย้ายเพื่อ จำกัด การละเมิดความเป็นส่วนตัวที่เป็นผลข้างเคียงพวกเขาต้องการปิดความสามารถสำหรับนักพัฒนาปกติ (ที่ไม่ใช่ บริษัท ในเครือ Facebook) เพื่อพัฒนาธุรกิจของพวกเขาโดยใช้ข้อมูล Facebook
Daniel Sharp

3
Facebook ได้รับการตีพิมพ์เมื่อเร็ว ๆ นี้การเปลี่ยนแปลงที่สำคัญข้อมูลที่มีอยู่: เห็นการเปลี่ยนแปลง taggable_friendsตอนนี้ผลตอบแทนอะไร นอกจากนี้จำเป็นต้องมีการตรวจสอบการเข้าสู่ระบบก่อนที่คุณจะได้รับuser_friendsอนุญาต
Duncan Jones

อะไรคือจุดประสงค์ของการจัดหา API หากไม่อนุญาตให้คุณทำงานพื้นฐานเช่นรายชื่อเพื่อน
6infinity8

17

แม้ว่าไซม่อนครอสคำตอบนั้นได้รับการยอมรับและถูกต้อง แต่ฉันคิดว่าฉันอยากยกตัวอย่างเล็กน้อย (Android) ถึงสิ่งที่จะต้องทำ ฉันจะให้มันเป็นเรื่องทั่วไปเท่าที่จะทำได้ ส่วนตัวแล้วฉันเก็บของไว้ในฐานข้อมูลทำให้การโหลดราบรื่น แต่ต้องใช้ CursorAdapter และ ContentProvider ซึ่งอยู่นอกขอบเขตเล็กน้อย

ฉันมาที่นี่ด้วยตัวเองแล้วคิดว่าตอนนี้อะไร!

ปัญหา

เช่นเดียวกับผู้ใช้3594351ฉันสังเกตเห็นว่าข้อมูลเพื่อนว่างเปล่า ฉันพบสิ่งนี้โดยใช้ FriendPickerFragment ทำงานเมื่อสามเดือนที่แล้วไม่ทำงานอีกต่อไป แม้แต่ตัวอย่างของ Facebook ก็พัง ดังนั้นปัญหาของฉันคือ 'ฉันจะสร้าง FriendPickerFragment ด้วยมือได้อย่างไร?

อะไรไม่ทำงาน

ตัวเลือก # 1 จากSimon Crossยังไม่แข็งแรงพอที่จะเชิญเพื่อนมาที่แอป Simon Crossยังแนะนำไดอะล็อกการร้องขอ แต่จะอนุญาตได้เพียงห้าครั้งเท่านั้น กล่องโต้ตอบคำขอยังแสดงให้เห็นว่ามีเพื่อนคนเดียวกันในระหว่างการเข้าสู่ระบบ Facebook ไม่มีประโยชน์.

ทำงานอย่างไร (สรุป)

ตัวเลือก # 2 กับงานบางอย่าง คุณต้องทำให้แน่ใจว่าคุณปฏิบัติตามกฎใหม่ของ Facebook: 1. ) คุณเป็นเกม 2. ) คุณมีแอพ Canvas (การแสดงตนของเว็บ) 3. ) แอปของคุณลงทะเบียนกับ Facebook มันจะทำทั้งหมดบนเว็บไซต์ของนักพัฒนา Facebook ภายใต้การตั้งค่า

ในการเลียนแบบเครื่องมือเลือกเพื่อนด้วยมือในแอพของฉันฉันได้ทำสิ่งต่อไปนี้:

  1. สร้างกิจกรรมแท็บที่แสดงสองชิ้น แต่ละส่วนจะแสดงรายการ หนึ่งส่วนสำหรับเพื่อนที่พร้อมใช้งาน ( / ฉัน / เพื่อน ) และอีกอันสำหรับเพื่อนที่น่าเชื่อถือ ( / ฉัน / invitable_friends ) ใช้รหัสส่วนเดียวกันเพื่อแสดงทั้งสองแท็บ
  2. สร้าง AsyncTask ที่จะรับข้อมูลเพื่อนจาก Facebook เมื่อโหลดข้อมูลแล้วให้โยนไปยังอะแดปเตอร์ซึ่งจะแสดงค่าไปที่หน้าจอ

รายละเอียด

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 Facebook JSON: " + e.getLocalizedMessage());
        }
    }
}

20
แล้วแอพที่ไม่ใช่เกมจะเป็นอย่างไร? เว็บไซต์หาคู่ ... เกมเพื่อค้นหาผู้คนแอพเพื่อค้นหาร้านอาหาร ... เกมหาร้านอาหาร ฯลฯ คุณจะได้รับแนวคิด นี่เป็นเกมที่ใกล้เคียงกับเกมจริงๆหรือนี่เป็นเพียงวิธีการบังคับให้คุณวางแอพใน Facebook และใช้เงินในแพลตฟอร์มโฆษณาของพวกเขา ใครจะเป็นผู้ตัดสินว่าเกมคืออะไร? ใครเป็นคนตัดสินใจว่าแอปของคุณเป็นเกมจริงหรือไม่ อย่าเข้าใจฉันผิดเกี่ยวกับเรื่องนี้ แต่สำหรับฉันแล้วมันไม่มีเหตุผลที่จะปิดกั้นแอพที่ไม่ใช่เกมเว้นแต่คุณเพียงแค่ต้องการบังคับให้พวกเขาใช้ระบบนิเวศของ Facebook
Mário

@ Márioนั่นคือความตั้งใจของ Facebook ภายใต้ประทุน คุณสามารถใส่อะไรก็ได้และทำเครื่องหมายว่าเป็นเกมเพราะมันไม่สนใจว่ามันจะเป็นเกมหรือไม่ สิ่งที่พวกเขาสนใจคือการรับเงินจากกระเป๋าของคุณ
sandalone

12

Facebook ได้แก้ไขนโยบายของพวกเขาแล้ว คุณไม่สามารถรับรายชื่อเพื่อนทั้งหมดได้หากแอปของคุณไม่มีการนำ Canvas ไปใช้และหากแอปของคุณไม่ใช่เกม แน่นอนว่ายังมี taggable_friends แต่สิ่งนั้นมีไว้สำหรับการติดแท็กเท่านั้น

คุณจะสามารถดึงรายชื่อเพื่อนที่อนุญาตแอพเท่านั้น

แอพที่ใช้ Graph API 1.0 จะใช้งานได้จนถึง 30 เมษายน 2015 และหลังจากนั้นจะเลิกใช้งาน

ดูต่อไปนี้เพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนี้:


3

ในSwift 4.2 และXcode 10.1:

หากคุณต้องการรับรายชื่อเพื่อนจาก Facebook คุณต้องส่งแอพของคุณเพื่อตรวจสอบใน Facebook ดูการอนุญาตเข้าสู่ระบบบางส่วน:

สิทธิ์การเข้าสู่ระบบ

นี่คือสองขั้นตอน:

1) อันดับแรกสถานะแอปของคุณจะต้องเป็นแบบสด

2) รับสิทธิ์ที่จำเป็นในการใช้ Facebook

1) เปิดใช้งานสถานะแอพของเราสด:

  1. ไปที่หน้าแอพและเลือกแอพของคุณ

    https://developers.facebook.com/apps/

  2. เลือกสถานะที่ด้านบนขวาในแผงควบคุม

    ป้อนคำอธิบายภาพที่นี่

  3. ส่งURL นโยบายความเป็นส่วนตัว

    ป้อนคำอธิบายภาพที่นี่

  4. เลือกหมวดหมู่

    ป้อนคำอธิบายภาพที่นี่

  5. ตอนนี้แอพของเราอยู่ในสถานะสด

    ป้อนคำอธิบายภาพที่นี่

ขั้นตอนเดียวเสร็จสมบูรณ์

2) ส่งแอพของเราเพื่อตรวจสอบ:

  1. ก่อนส่งคำขอที่จำเป็น

    ตัวอย่าง: user_friends, user_videos, user_posts ฯลฯ

    ป้อนคำอธิบายภาพที่นี่

  2. ประการที่สองไปที่หน้าคำขอปัจจุบัน

    ป้อนคำอธิบายภาพที่นี่

    ตัวอย่าง: user_events

  3. ส่งรายละเอียดทั้งหมด

    ป้อนคำอธิบายภาพที่นี่

  4. เช่นนี้ส่งสำหรับคำขอทั้งหมด (user_friends, user_events, user_videos, user_posts, ฯลฯ )

  5. สุดท้ายส่งแอปของคุณเพื่อตรวจสอบ

    หากความเห็นของคุณได้รับการยอมรับจากด้านข้างของ Facebook ตอนนี้คุณมีสิทธิ์ที่จะอ่านผู้ติดต่อ ฯลฯ


3
การuser_friendsอนุญาตมี จำกัด มาก จากเอกสารของ Facebook (เมษายน, 2019): [สิ่งนี้เท่านั้น] ให้สิทธิ์แอพเพื่อเข้าถึงรายชื่อเพื่อนที่ใช้แอพดังกล่าว การอนุญาตนี้ จำกัด เฉพาะคู่ค้าที่มีจำนวน จำกัด และการใช้งานต้องได้รับการอนุมัติจาก Facebook ก่อน เพื่อให้บุคคลปรากฏในรายชื่อเพื่อนของคนอื่นทั้งสองคนต้องแชร์รายชื่อเพื่อนกับแอพและไม่ได้ปิดการอนุญาตนี้ระหว่างการเข้าสู่ระบบ
dearsina

2

ดังที่ Simon กล่าวถึงสิ่งนี้ไม่สามารถทำได้ใน Facebook API ใหม่ เทคนิคการพูดที่บริสุทธิ์คุณสามารถทำได้ผ่านเบราว์เซอร์อัตโนมัติ

  • สิ่งนี้ขัดต่อนโยบาย Facebook ดังนั้นขึ้นอยู่กับประเทศที่คุณอาศัยอยู่ซึ่งอาจไม่ถูกกฎหมาย
  • คุณจะต้องใช้ข้อมูลประจำตัวของคุณ / ถามผู้ใช้สำหรับข้อมูลประจำตัวและอาจเก็บไว้ (การจัดเก็บรหัสผ่านแม้การเข้ารหัสแบบสมมาตรไม่ใช่ความคิดที่ดี)
  • เมื่อ Facebook เปลี่ยน API ของพวกเขาคุณจะต้องอัปเดตรหัสการทำงานอัตโนมัติของเบราว์เซอร์ด้วย (หากคุณไม่สามารถบังคับให้มีการอัปเดตแอปพลิเคชันของคุณได้
  • นี่คือการข้ามแนวคิด OAuth
  • ในทางกลับกันความรู้สึกของฉันคือฉันเป็นเจ้าของข้อมูลของฉันรวมถึงรายชื่อเพื่อนของฉันและ Facebook ไม่ควร จำกัด ให้ฉันเข้าถึงพวกเขาผ่านทาง API

ตัวอย่างการใช้งานโดยใช้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;
}

ต้นแบบกับการดำเนินการของวิธีนี้ (ใช้ C # / WatiN) ดูhttps://github.com/svejdo1/ShadowApi นอกจากนี้ยังอนุญาตการอัปเดตตัวเชื่อมต่อ Facebook แบบไดนามิกที่เรียกรายชื่อผู้ติดต่อของคุณ


2
รหัสของคุณจะถือว่าแอพนี้มีสิทธิ์เข้าถึงชื่อผู้ใช้และรหัสผ่านของผู้ใช้ นี่ไม่ใช่วิธีการทำงานของ OAuth และผู้ใช้ส่วนใหญ่จะไม่ให้บริการชื่อผู้ใช้และรหัสผ่าน FB กับแอปพลิเคชัน นั่นจะเป็นความเสี่ยงด้านความปลอดภัยขนาดใหญ่
jbustamovej

32
สิ่งนี้ขัดต่อนโยบายของ Facebook ไม่ควรทำตามคำแนะนำนี้
Simon Cross

3
ในบันทึกย่ออื่นคุณไม่ได้ปลอดภัยที่จะปกป้องข้อมูลประจำตัวของผู้ใช้ในการแฮ็คของคุณ ในกรณีที่มีคนตัดสินใจใช้รหัสของคุณโปรดตรวจสอบให้แน่ใจว่าใช้ SSL ด้วยการเปลี่ยน uri เป็น https
Rogala

8
บวกหนึ่งสำหรับผลักหน้าของพวกเขา!
Skynet

12
พวกคุณทุกคนดูเหมือนว่านโยบาย Facebook เป็นกฎหมายระหว่างประเทศและคุณคิดว่าคุณเป็นอาชญากร นอกจากนี้คุณคิดว่า Facebook มี แต่สิ่งที่ดีที่สุดสำหรับผู้ใช้ที่อยู่ในใจซึ่งฉันคิดว่าผิดเช่น @OndrejSvejdar กล่าวเพราะพวกเขาจะให้คุณเลือกถ้าคุณต้องการที่จะเห็นในแอปอื่น ๆ ฉันคิดว่านี่เป็นเพียงการย้ายโดย Facebook เพื่อขัดขวางการเติบโตของผู้อื่นผ่านทางแพลตฟอร์มของพวกเขาได้ฟรี ผู้คนควรเริ่มพัฒนาแอพบริการเกมข่าวและอื่น ๆ โดยตรงบน Facebook และจ่ายค่าโฆษณาบน Facebook เมื่อไม่ต้องการ
JustGoscha

2

ลอง/me/taggable_friends?limit=5000ใช้รหัส JavaScript ของคุณ

หรือ

ลองใช้กราฟ API :

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


2
อย่างที่ฉันคิด - downvotes ที่นี่เป็นเพราะ "การใช้จุดปลายนี้ต้องการการตรวจสอบโดย Facebook และควรจะใช้สำหรับกรณีที่คุณแสดงรายชื่อเพื่อนเพื่อให้แท็กผู้ใช้ในโพสต์" คุณสามารถอ่านเพิ่มเติมเกี่ยวกับสิ่งนี้ได้ในคำตอบที่เลือก
moonvader

{"data": [], "summary": {"total_count": 414}} ฉันมี json data block null ไม่รับเพื่อน ฉันจะทำอย่างไร
Makvin

-1

ใน Facebook SDK Graph API v2.0 หรือสูงกว่าคุณต้องขออนุญาตuser_friendsจากผู้ใช้แต่ละคนในช่วงเวลาของการเข้าสู่ระบบ Facebook เนื่องจากuser_friendsจะไม่รวมอยู่ในการเข้าสู่ระบบทุกครั้ง; เราต้องเพิ่มมันเข้าไป

ผู้ใช้แต่ละคนจะต้องอนุญาตให้user_friendsได้รับอนุญาตในการสั่งซื้อที่จะปรากฏในการตอบสนองต่อ/ ME / เพื่อน

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 {
        }
    }
}

ดังนั้นในช่วงเวลาของการเข้าสู่ระบบ Facebook มันแจ้งให้กับหน้าจอที่มีสิทธิ์ทั้งหมด:

ป้อนคำอธิบายภาพที่นี่

หากผู้ใช้กดปุ่มดำเนินการต่อการอนุญาตจะถูกตั้งค่า เมื่อคุณเข้าถึงรายชื่อเพื่อนโดยใช้ Graph API เพื่อนของคุณที่ลงชื่อเข้าใช้แอปพลิเคชันดังกล่าวจะถูกแสดงรายการ

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

            print(result!)
        }
    })
}

ผลลัพธ์จะมีผู้ใช้ที่ให้สิทธิ์user_friendsเมื่อลงชื่อเข้าใช้แอปพลิเคชันของคุณผ่าน Facebook

{
    data = (
             {
                 id = xxxxxxxxxx;
                 name = "xxxxxxxx";
             }
           );
    paging = {
        cursors = {
            after = xxxxxx;
            before = xxxxxxx;
        };
    };
    summary = {
        "total_count" = 8;
    };
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.