โทเค็นการเข้าถึง FB ที่ยาวนานสำหรับเซิร์ฟเวอร์เพื่อดึงข้อมูลหน้า FB


115

ฉันทราบดีว่ามีคำถามมากมายเกี่ยวกับโทเค็นการเข้าถึง Facebook และความเศร้าโศกที่ทำให้เกิดขึ้น แต่แม้จะมีการทดลองและอ่านบทความบล็อกที่คลุมเครือมากมาย (FB และอื่น ๆ ) แต่ฉันก็ยังคงดิ้นรนเพื่อให้ได้คำตอบที่ชัดเจนสำหรับความต้องการของฉัน . ให้ฉันสรุปกระบวนการของฉันโดยสรุป:

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

และนี่คือจุดที่ฉันติดอยู่ คีย์ 60 วันของฉันใช้งานได้ดีสำหรับเซิร์ฟเวอร์ของฉันในการดึงข้อมูลที่ต้องการจากหน้านี้ แต่เท่าที่ฉันบอกได้ไม่มีวิธีใดที่จะขยายคีย์ 60 วันนั้นโดยทางโปรแกรม ฉันยังไม่รู้วิธีสร้างคีย์อายุสั้นใหม่โดยไม่ต้องไปที่ Facebook Graph API Explorer และสร้างด้วยตนเอง

เนื่องจากเป็นเซิร์ฟเวอร์ของฉันที่ส่งคำขอไปยัง Facebook API และไม่ใช่ระบบที่อิงกับผู้ใช้ (ซึ่งฉันสามารถขอให้ผู้ใช้อนุญาตแอป Facebook อีกครั้งได้อย่างง่ายดาย) สิ่งนี้จึงสร้างระบบที่ยุ่งเหยิงมาก เนื่องจาก Facebook เลิกใช้งานแล้วoffline_accessไม่มีวิธีถาวรที่จะให้เซิร์ฟเวอร์ของฉันดึงข้อมูลจากเพจของตัวเองได้หรือไม่? ฉันจะต้องสร้างคีย์ใหม่ด้วยตนเองจริง ๆ และอัปเดตเซิร์ฟเวอร์ของฉันด้วยตนเองทุกๆ 60 วันหรือไม่?

หรือมีบางอย่างที่ฉันขาดหายไป?

ปรับปรุง:

คู่มือขั้นตอนโดยขั้นตอนที่พบก่อนหน้านี้ที่นี่ได้รับการอพยพลงมาเป็นของตัวเองคำตอบ


นี่มันเจ๋งมาก. ฉันอยู่ในสถานการณ์เดียวกันและกำลังมองหาข้อมูลบางอย่างเกี่ยวกับหัวข้อนี้ ปลอดภัยหรือไม่ที่โทเค็นนี้จะไม่ละเมิดนโยบายแพลตฟอร์ม FB ใด ๆ แค่ขอให้แน่ใจ
onigunn

2
เอกสารของ @asrijaal Facebook เอง(ดูสถานการณ์ที่ 5) บอกว่าโทเค็นการเข้าถึงเพจเหล่านี้ไม่มีวันหมดอายุ ฉันว่ามันปลอดภัยที่จะถือว่าพวกเขาปฏิบัติตามนโยบายของ Facebook
redhotvengeance

"ฉันคิดว่ามันเป็นการดีที่จะออกจากกระบวนการทีละขั้นตอนที่ชัดเจน" - สวรรค์ห้าม :) ขอบคุณ @redhotvengeance
Steve McGill

คุณพิมพ์ผิดกับ URL โทเค็นการเข้าถึงเพจของคุณ ควรจะเป็น? ไม่ใช่ & หลังบัญชี ใช้เวลาสักพักเพื่อหาสาเหตุว่าทำไมจึงไม่ได้ผล : P
Joren

@Joren แน่นอน - ตอนนี้ได้รับการแก้ไขแล้ว ขอบคุณ!
redhotvengeance

คำตอบ:


189

นี่คือขั้นตอนที่เคยอยู่ในคำถาม - พวกเขาถูกย้ายไปยังคำตอบนี้

เมื่อพบว่าเป็นไปได้ที่จะสร้างโทเค็นการเข้าถึงเพจ Facebook ที่ไม่หมดอายุ (ด้วยความช่วยเหลือจาก @Igy) ต่อไปนี้เป็นข้อสรุปที่ชัดเจนทีละขั้นตอนสำหรับทุกคนที่ต้องการสิ่งเดียวกัน:

  1. ตรวจสอบว่าคุณเป็นผู้ดูแลเพจ FB ที่คุณต้องการดึงข้อมูลมา
  2. สร้างแอพ FB (ควรใช้บัญชีผู้ใช้เดียวกับที่เป็นผู้ดูแลเพจ)
  3. ตรงไปที่Facebook Graph API Explorer
  4. ที่ด้านขวาบนให้เลือกแอพ FB ที่คุณสร้างจากรายการแบบเลื่อนลง "แอปพลิเคชัน"
  5. คลิก "รับโทเค็นการเข้าถึง"
  6. ตรวจสอบว่าคุณได้เพิ่มmanage_pagesสิทธิ์
  7. แปลงโทเค็นการเข้าถึงอายุสั้นนี้ให้เป็นโทเค็นที่มีอายุการใช้งานยาวนานโดยการเรียก Graph API: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  8. รับโทเค็นการเข้าถึงอายุการใช้งานใหม่ที่ส่งคืนกลับมา
  9. โทรหา Graph API เพื่อดูบัญชีของคุณโดยใช้โทเค็นการเข้าถึงใหม่ที่มีอายุการใช้งานยาวนาน: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. ไปaccess_tokenที่หน้าเว็บที่คุณจะดึงข้อมูลมา
  11. ทับโทเค็นเพื่อดูว่าตั้งค่าเป็นExpires: Never!

ที่ควรทำ. ตอนนี้คุณควรมี Facebook Page Access Token ที่ไม่หมดอายุเว้นแต่:

  • คุณเปลี่ยนรหัสผ่านบัญชี Facebook ของคุณ
  • คุณสูญเสียสิทธิ์การเข้าถึงระดับผู้ดูแลระบบสำหรับเพจเป้าหมาย
  • คุณลบหรือยกเลิกการอนุญาตแอพ Facebook ของคุณ

สิ่งเหล่านี้จะทำให้โทเค็นการเข้าถึงไม่ถูกต้อง

หากคุณได้รับ(#100) Tried accessing nonexisting field (accounts) on node type (Page)ให้ไปที่Access Token Debuggerคัดลอกค่าของUser IDและใช้เพื่อแทนที่ส่วน "ฉัน" ของ URL ในขั้นตอนที่ 9


2
ขั้นตอนที่ 6 ต้องทำอย่างไรและที่ไหน
Stefan Müller

5
@ StefanMüllerเมื่อคุณคลิก "รับโทเค็นการเข้าถึง" ในหน้า Graph API Explorer กล่องโต้ตอบ "เลือกสิทธิ์" จะปรากฏขึ้น manage_pagesตัวเลือกที่อยู่ภายใต้Extended Permissionsแท็บ
redhotvengeance

2
ที่ดี! สิ่งนี้ใช้งานได้อย่างมีเสน่ห์และสิ่งนี้เผยแพร่เป็น PAGE ไม่ใช่ในฐานะผู้ใช้
Benjamin Piette

3
ฉันเชื่อว่าสิ่งนี้ล้าสมัยแล้ว และคุณจะได้รับโทเค็นการเข้าถึงซึ่งจะหมดอายุในอีกประมาณสองเดือนเท่านั้น
Qaiser Wali

7
ฉันได้ทำทุกอย่างแล้วและได้ผลยกเว้นว่ารหัสโทเค็นที่มีอายุการใช้งานยาวนานจะหมดอายุหลังจาก 2 เดือนและไม่สิ้นสุด นอกจากนี้Acces Token Debuggerยังมีลิงก์ที่ด้านล่างของแบบฟอร์มเพื่อขยายโทเค็นการเข้าถึงที่มีอายุสั้นไปยังโทเค็นการเข้าถึงที่มีอายุการใช้งานยาวนาน
SlimIT

15

สิ่งนี้ครอบคลุมอยู่ในเอกสารการเลิกใช้งานการเข้าถึงแบบออฟไลน์

ใช้โทเค็น 60 วันสำหรับผู้ดูแลเพจเพื่อดึงโทเค็นการเข้าถึงเพจ (ผ่าน/PAGE_ID?fields=access_tokenหรือ/me/accounts) - โทเค็นการเข้าถึงเพจจะไม่มีเวลาหมดอายุ


5
ถอนหายใจ อันที่จริงนี่น่าจะเป็นตั๋ว ฉันสาบานได้เลยว่าฉันลองทุกขั้นตอนที่เป็นไปได้ - ดูเหมือนว่าฉันพลาดขั้นตอนที่ใช้งานได้จริง ช่างเป็นชุดของการกระทำที่จำเป็นอย่างยิ่ง ขอบคุณมากสำหรับความช่วยเหลือ!
redhotvengeance

1
ชิ้นส่วนมากมายในอินเทอร์เน็ตนี่คือสิ่งที่ใช้งานได้จริง
Ernesto

มีวิธีใดบ้างที่จะได้รับ 60 วันนี้page_access_tokenโดยใช้รหัสในจาวาสคริปต์ ชอบวิธีการรับuser_access_token> FB.getAuthResponse()['accessToken'];ขอบคุณ!
Tulon

4

แนวทางที่ใช้ได้ผลในปี 2019

เมื่อเร็ว ๆ นี้ฉันพยายามบรรลุสิ่งที่คล้ายกัน (เช่นกรณีการใช้งานที่อธิบายไว้ในชุดข้อความนี้) แต่ฉันต้องการให้แน่ใจว่าเคารพนโยบายปัจจุบันของ Facebook ดังนั้นฉันจึงทำการค้นคว้าเล็กน้อยและที่นี่ฉันกำลังแบ่งปันสิ่งที่ฉันพบ

กรณีการใช้งานของฉัน

ดังที่ฉันได้กล่าวไปแล้วกรณีการใช้งานของฉันคล้ายกับที่อธิบายไว้ที่นี่มาก นั่นคือ:

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

ในมุมมองของฉันเป็นกรณีการใช้งานที่ถูกต้อง แต่ฉันไม่แน่ใจว่าจะใช้งานอย่างไรในลักษณะที่สอดคล้องกับนโยบายของ Facebook

คำตอบที่ยอมรับ

ฉันทำตามขั้นตอนของคำตอบที่ยอมรับและได้ผลยกเว้นว่าดูเหมือนว่าสิ่งต่างๆจะเปลี่ยนไป: ตอนนี้แม้ว่าโทเค็นของเพจที่สร้างขึ้นจะไม่มีวันหมดอายุ แต่access to dataจะหมดอายุภายใน 60 วัน คุณจะเห็นสิ่งนั้นเช่นกันหากคุณทำตามขั้นตอนและตรวจสอบโทเค็นของเพจในFB Token Debugger Toolดีบักเครื่องมือ

นอกจากนี้ความจริงที่ว่าโทเค็นของเพจที่สร้างขึ้นนั้นเชื่อมโยงกับบัญชีผู้ใช้ก็เป็นเรื่องที่โชคร้ายเช่นกันเพราะหากผู้ใช้อัปเดตรหัสผ่านของตนโทเค็นของเพจก็จะไม่ถูกต้องด้วย

ทำอย่างไรในปี 2562

หลังจากค้นคว้าข้อมูลหลายชั่วโมงฉันก็พบบทความเอกสารของ Facebook ต่อไปนี้: Business Login for Direct Businessesธุรกิจเข้าสู่ระบบสำหรับธุรกิจโดยตรง

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

ขั้นตอนและส่วนที่สำคัญที่สุดมีดังนี้

  • คุณต้องมีบัญชี ผู้จัดการธุรกิจ
    • จะต้องมีการยืนยันและจะต้องลงนามในสัญญาดิจิทัล
  • คุณต้องเพิ่มเพจ Facebook เป้าหมายในบัญชีนั้น
  • คุณต้องสร้างแอพ Facebook และโอนแอพนั้นไปยังบัญชี Business Manager เดียวกันด้วย
  • app ที่จะต้องไปผ่านกระบวนการตรวจสอบของ Facebook เพราะสิทธิ์ต่อไปนี้จะเป็นที่ต้องการ: และ manage_pagespublish_pages
    • โน๊ตสำคัญสำหรับโพสต์ที่ทำโดยใช้โทเค็นสร้างเพจเพื่อให้ผู้ใช้อื่นเห็นนอกเหนือจากผู้ดูแลระบบแอปพลิเคชันแอปนั้นจะต้องได้รับการเผยแพร่และอนุมัติ
    • คุณยังสามารถทดลองใช้แนวคิดนี้ได้โดยไม่ต้องส่งเข้ารับการตรวจสอบ แต่โพสต์จะไม่ปรากฏต่อสาธารณะ
  • ในบัญชีตัวจัดการธุรกิจ (หลังจากเพิ่มแอปและเพจของคุณลงในบัญชีแล้วเท่านั้น) คุณต้องสร้างสิ่งที่เรียกว่าผู้ใช้ระบบและมอบบทบาทผู้ดูแลระบบของผู้ใช้ (หรือสิทธิ์) ให้กับเพจ Facebook เป้าหมาย
    • ผู้ใช้ระบบเป็นเจ้าของโดยบัญชีตัวจัดการธุรกิจและไม่ได้เชื่อมโยงกับผู้ใช้บางราย ความเข้าใจในปัจจุบันของฉันคือกรณีการใช้งานที่สำคัญอย่างหนึ่งสำหรับผู้ใช้ระบบคือการเข้าถึง Graph API ของ Facebook แบบเป็นโปรแกรม (ตามที่เราต้องการ)
  • จากนั้นสำหรับผู้ใช้ระบบนั้นคุณจะต้องสร้างโทเค็นการเข้าถึง (ซึ่งจะไม่มีวันหมดอายุ) คุณจะได้รับแจ้งให้เลือกแอปใด จากนั้นคุณจะเลือกแอปเป้าหมายของคุณ
  • จากนั้นคุณจะต้องใช้โทเค็นของแอปที่สร้างขึ้นเพื่อสร้างโทเค็นของเพจซึ่งจะไม่มีวันหมดอายุ ขั้นตอนนี้อธิบายไว้ในบทความนี้ว่า:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • แค่นั้นแหละ.

โทเค็นนั้นจะไม่มีวันหมดอายุและจะไม่เชื่อมโยงกับผู้ใช้ Facebook คนใดคนหนึ่งดังนั้นจึงเป็นสิ่งที่เราต้องการ!

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

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

หมายเหตุอื่น ๆ เกี่ยวกับกระบวนการตรวจสอบแอป:

  • ผมต้องเลือกแพลตฟอร์มสำหรับแอปดังนั้นฉันเลือกเว็บไซต์
  • ฉันต้องระบุว่าเหตุใดแอปจึงต้องการการอนุญาตสองสิทธิ์และวิธีการใช้งาน
  • ฉันต้องระบุว่าเหตุใดผู้ตรวจสอบจึงไม่สามารถลงชื่อเข้าใช้แอปของฉันและลองใช้งานได้ (กล่าวคือเนื่องจากกระบวนการของผู้ปฏิบัติงานจะใช้แอป)
  • สำหรับ screencasts บังคับฉันเพียงแค่นำเสนอการดำเนินการด้วยตนเองในเทอร์มินัลโดยใช้curlยูทิลิตี้ (เพื่อสร้างโทเค็นของเพจและโพสต์ไปยังเพจ Facebook) ฉันยังแสดงให้เห็นว่าฉันใช้ Business Manager เพื่อเชื่อมโยงผู้ใช้ระบบไปยังเพจและสร้างโทเค็นและอื่น ๆ ได้อย่างไร
  • อีกครั้งฉันเจาะจงมากเกี่ยวกับกรณีการใช้งานของฉันและฉันคิดว่านั่นช่วยได้

ฉันหวังว่าข้อมูลนี้จะเป็นประโยชน์กับผู้ที่มีกรณีการใช้งานที่คล้ายคลึงกัน


1

ขอบคุณมากที่ @redhotvengeance สำหรับคำแนะนำทีละขั้นตอน

หลังจากนั้นไม่นานตอนนี้มีการอธิบายไว้อย่างชัดเจนในเอกสารของ Facebook:

https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension

การขยายโทเค็นการเข้าถึงเพจ

แอปสามารถดึงโทเค็นการเข้าถึงเพจจากผู้ใช้ผู้ดูแลเพจเมื่อตรวจสอบสิทธิ์ด้วยสิทธิ์ Manage_pages หากโทเค็นการเข้าถึงของผู้ใช้ที่ใช้ในการดึงโทเค็นการเข้าถึงเพจนี้มีอายุการใช้งานสั้นโทเค็นการเข้าถึงเพจจะมีอายุสั้นเช่นกัน

หากต้องการรับโทเค็นการเข้าถึงเพจที่มีอายุการใช้งานยาวนานขึ้นให้แลกเปลี่ยนโทเค็นการเข้าถึงของผู้ใช้เป็นโทเค็นที่มีอายุการใช้งานยาวนานดังที่กล่าวมาข้างต้นแล้วขอโทเค็นการเข้าถึงเพจ โทเค็นการเข้าถึงเพจที่เป็นผลลัพธ์จะไม่มีเวลาหมดอายุ


0

คุณยังสามารถคัดลอกและผ่านจากแดชบอร์ดของแอพใน facebook ขั้นตอน:

  1. ไปที่https://developers.facebook.com

  2. เลือกแอปของคุณที่มุมขวาบนของหน้า (รูปลักษณะเป็นอย่างไร)

  3. คลิกที่ Messenger จากตัวเลือกทางด้านซ้าย (มันจะไปที่การตั้งค่าโดยอัตโนมัติ) (รูปของสิ่งที่ดูเหมือน)
  4. ไปที่ส่วน "Token Generation" ในหน้า เลือกหน้าที่คุณต้องการสร้างโทเค็น (รูปลักษณะของส่วนนั้น)
  5. คัดลอกและวางโทเค็นหน้าของคุณในที่ที่คุณต้องการ

โปรดทราบว่าในทางทฤษฎีโทเค็นของคุณจะไม่มีวันหมดอายุ แต่มันเชื่อมโยงโดยตรงกับบัญชี Facebook ที่คุณลงชื่อเข้าใช้ ดังนั้นสมมติว่าคุณเปลี่ยนรหัสผ่านหรือคุณลบการอนุญาตระหว่างบัญชีและแอปโทเค็นของคุณจะใช้ไม่ได้อีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.