การแชร์ใน Android

คู่มือฉบับนี้อธิบายรายละเอียดวิธีเปิดการแชร์จากแอพ Android ของคุณไปยัง Facebook เมื่อมีคนแชร์เนื้อหาจากแอพของคุณ เนื้อหานั้นจะแสดงในไทม์ไลน์ของบุคคลนั้นและอาจแสดงในฟีดข่าวของเพื่อนของบุคคลนั้นด้วย

ผู้ใช้ยังแชร์เนื้อหาจากแอพของคุณไปยัง Facebook Messenger ได้ด้วย

ข้อกำหนดที่ต้องดำเนินการก่อน

ก่อนที่คุณจะสามารถแชร์จาก Facebook จากแอพของคุณได้ คุณจะต้องลิงก์หรือดาวน์โหลด SDK การแชร์ด้วย Facebook สำหรับ Android

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

เชื่อมโยง SDK กับ Maven

  1. ในโปรเจ็กต์ของคุณ เปิด your_app | สคริปต์ Gradle | build.gradle (โปรเจ็กต์) แล้วเพิ่มแหล่งเก็บข้อมูลต่อไปนี้ลงในส่วน buildscript { repositories {}} เพื่อดาวน์โหลด SDK จาก Maven Central Repository:
    mavenCentral() 
  2. ในโปรเจ็กต์ของคุณ เปิด your_app | สคริปต์ Gradle | build.gradle (โมดูล: แอพ) แล้วเพิ่มข้อความการคอมไพล์ต่อไปนี้ลงในส่วน dependencies{} เพื่อคอมไพล์ SDK เวอร์ชั่นล่าสุด
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. สร้างโปรเจ็กต์ของคุณ

ดาวน์โหลด SDK

หากต้องการดาวน์โหลด SDK ให้คลิกปุ่มต่อไปนี้

ดาวน์โหลด SDK

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

ข้อกำหนดเพิ่มเติมที่ต้องดำเนินการก่อน

สำหรับการเพิ่มเติม คุณจำเป็นต้องกระทำตามต่อไปนี้

โปรดดูรายละเอียดของข้อกำหนดเหล่านี้ใน Android - การเริ่มต้นใช้งาน

และคุณต้องตั้งค่า ContentProvider ใน AndroidManifest.xml ของคุณโดย {APP_ID} เป็น ID ของแอพคุณ

<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true"/>

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

การสร้างโมเดลเนื้อหา

Facebook SDK เวอร์ชั่น 4.0 ขึ้นไปมีโมเดลใหม่สำหรับการแชร์เนื้อหา เนื้อหาแต่ละประเภทที่ผู้ใช้ต้องการแชร์จะมีคลาสที่ใช้แสดงได้ หลังจากสร้างโมเดลเนื้อหาแล้ว ให้เพิ่มอินเทอร์เฟซการแชร์ในแอพ

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

ตั้งแต่วันที่ 18 เมษายน 2017 เป็นต้นไป API กราฟเวอร์ชั่น 2.9 ขึ้นไปไม่รองรับพารามิเตอร์ต่อไปนี้ สำหรับเวอร์ชั่น 2.8 และต่ำกว่า พารามิเตอร์จะยังคงทำงานจนถึงวันที่ 17 กรกฎาคม 2017

  • contentTitle ซึ่งแสดงชื่อเนื้อหาในลิงก์
  • imageURL ซึ่งเป็น URL ของภาพขนาดย่อที่จะแสดงในโพสต์
  • contentDescription ของเนื้อหา ซึ่งโดยปกติมีความยาว 2-4 ประโยค

ตัวอย่างวิธีทริกเกอร์การแชร์มีดังนี้

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .build();

หากต้องการดูตัวอย่างการแชร์ลิงก์ไปยัง Google Play หรือ App Store โปรดกรอก URL ลงในตัวแก้ไขจุดบกพร่องการแชร์

คำอธิบายและรูปภาพที่อยู่ในการแชร์จะไม่แสดง หากการแชร์แอพมีลิงก์ไปยังแอพใดก็ตามใน Google Play หรือ App Store แต่เราจะไปนำชื่อแอพและรูปภาพมาจากร้านค้าโดยตรง (และหากไม่มีรูปภาพ การแชร์ก็จะไม่มีรูปภาพเช่นกัน)

รูปภาพ

ผู้ใช้สามารถแชร์รูปภาพจากแอพของคุณไปยัง Facebook ได้ด้วยกล่องโต้ตอบการแชร์หรือใช้อินเทอร์เฟซที่กำหนดเอง

  • รูปภาพนั้นต้องมีขนาดไม่เกิน 12 MB
  • ผู้ใช้ต้องติดตั้งแอพ Facebook สำหรับ Android รูปแบบเดิมในเวอร์ชั่น 7.0 ขึ้นไป

สร้างเนื้อหาที่จะแชร์เป็นรูปภาพลงในโมเดล SharePhotoContent โปรดดูรายการแอตทริบิวต์ทั้งหมดในข้อมูลอ้างอิง SharePhotoContent

Bitmap image = ...
SharePhoto photo = new SharePhoto.Builder()
        .setBitmap(image)
        .build();
SharePhotoContent content = new SharePhotoContent.Builder()
        .addPhoto(photo)
        .build();

วิดีโอ

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

วิดีโอนั้นต้องมีขนาดไม่เกิน 12 MB

สร้างเนื้อหาที่จะแชร์เป็นวิดีโอลงในโมเดล ShareVideoContent โปรดดูรายการแอตทริบิวต์ทั้งหมดในข้อมูลอ้างอิง ShareVideoContent

Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
        .setLocalUrl(videoUrl)
        .build();
ShareVideoContent content = new ShareVideoContent.Builder()
        .setVideo(video)
        .build();

มัลติมีเดีย

ผู้ใช้สามารถแชร์การผสมผสานทั้งรูปภาพและวิดีโอจากแอพของคุณไปยัง Facebook ได้ด้วยกล่องโต้ตอบการแชร์ โปรดคำนึงสิ่งต่อไปนี้

  • ผู้ใช้ต้องติดตั้งแอพ Facebook สำหรับ Android รูปแบบเดิมในเวอร์ชั่น 7.1 ขึ้นไป
  • รูปภาพต้องมีขนาดไม่เกิน 12 MB
  • วิดีโอนั้นต้องมีขนาดไม่เกิน 12 MB
  • ผู้ใช้สามารถแชร์รูปภาพและวิดีโอพร้อมกันสูงสุดได้ 6 รายการ

สร้างเนื้อหาการแชร์มัลติมีเดียของคุณด้วยโมเดล ShareMediaContent โปรดดูรายการแอตทริบิวต์ทั้งหมดในข้อมูลอ้างอิง ShareMediaContent

SharePhoto sharePhoto1 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
SharePhoto sharePhoto2 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
ShareVideo shareVideo1 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();
ShareVideo shareVideo2 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();

ShareContent shareContent = new ShareMediaContent.Builder()
    .addMedium(sharePhoto1)
    .addMedium(sharePhoto2)
    .addMedium(shareVideo1)
    .addMedium(shareVideo2)
    .build();

ShareDialog shareDialog = new ShareDialog(...);
shareDialog.show(shareContent, Mode.AUTOMATIC);

เพิ่มอินเทอร์เฟซการแชร์

หลังจากจัดการเนื้อหาโดยสร้างโมเดลแล้ว คุณสามารถทริกเกอร์อินเทอร์เฟซการแชร์ของ Facebook หรือสร้างอินเทอร์เฟซด้วยตนเองเพื่อใช้เรียก API กราฟ

ปุ่ม

Facebook มีปุ่มรูปแบบเดิมสำหรับ Android เพื่อใช้ทริกเกอร์การแชร์


ในรีลีสของ Facebook SDK สำหรับ Android เวอร์ชั่น 4.28.0 ปุ่มถูกใจสำหรับ Android จะถูกเลิกใช้ คำเชิญให้ลงแอพจะได้รับการสนับสนุนจนถึงวันที่ 5 กุมภาพันธ์ 2018

ปุ่มถูกใจ

ผู้ใช้สามารถใช้ปุ่มถูกใจในการแชร์เนื้อหากับเพื่อนได้อย่างรวดเร็ว การแตะปุ่มถูกใจจะเป็นการ “ถูกใจ” เนื้อหาจากแอพของคุณ และจะแชร์ไปยัง Facebook ปุ่มถูกใจใช้เพื่อถูกใจเพจ Facebook หรืออ็อบเจ็กต์ใดก็ได้ของ Open Graph และยังอ้างอิงได้ด้วย URL หรือ ID โปรดใส่ส่วนย่อยของโค้ดต่อไปนี้ลงในมุมมองเพื่อเพิ่มปุ่มถูกใจ

LikeView likeView = (LikeView) findViewById(R.id.like_view);
likeView.setObjectIdAndType(
    "https://www.facebook.com/FacebookDevelopers",
    LikeView.ObjectType.PAGE);

ปุ่มแชร์

ปุ่มแชร์จะเรียก “กล่องการแชร์” ขึ้นมา โปรดใส่ส่วนย่อยของโค้ดต่อไปนี้ลงในมุมมองเพื่อเพิ่มปุ่มแชร์

ShareButton shareButton = (ShareButton)findViewById(R.id.fb_share_button);
shareButton.setShareContent(content);

ในรีลีสของ Facebook SDK เวอร์ชั่น 4.28.0 ปุ่มส่งจะถูกเลิกใช้ คำเชิญให้ลงแอพจะได้รับการสนับสนุนจนถึงวันที่ 5 กุมภาพันธ์ 2018

ปุ่มส่ง

ผู้ใช้สามารถส่งรูปภาพ วิดีโอ และลิงก์ให้เพื่อนและผู้ติดต่อได้แบบส่วนตัวด้วยปุ่มส่งโดยใช้ Facebook Messenger ปุ่มส่งจะเรียก “กล่องข้อความ” ขึ้นมา โปรดใส่ส่วนย่อยของโค้ดต่อไปนี้ลงในมุมมองเพื่อเพิ่มปุ่มส่ง

SendButton sendButton = (SendButton)findViewById(R.id.fb_send_button);
sendButton.setShareContent(shareContent);
sendButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });

กล่องการแชร์

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

ShareDialog.show(activityOrFragment, content);

เช่น หากต้องการแสดง ShareDialog สำหรับลิงก์ในกิจกรรม ให้สร้างอินสแตนซ์ ShareDialog ในวิธีการ onCreate ของคุณ ดังนี้

public class MainActivity extends FragmentActivity {
    CallbackManager callbackManager;
    ShareDialog shareDialog;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        callbackManager = CallbackManager.Factory.create();
        shareDialog = new ShareDialog(this);
        // this part is optional
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });
    }

จากนั้นแสดง ShareDialog ดังนี้

if (ShareDialog.canShow(ShareLinkContent.class)) {
    ShareLinkContent linkContent = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
            .build();
    shareDialog.show(linkContent);
}

แล้วเรียก callbackManager ของ SDK ใน onActivityResult ของคุณเพื่อจัดการการตอบกลับ ดังนี้

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

กล่องการส่งข้อความ

กล่องโต้ตอบข้อความจะสลับเป็นแอพ Messenger สำหรับ Android รูปแบบเดิม และจะคืนการควบคุมให้แอพหลังจากเผยแพร่โพสต์แล้ว ผู้คนอาจต้องการแตะที่ไอคอนลูกศรย้อนกลับเพื่อกลับไปยังแอพของคุณโดยขึ้นอยู่กับ SDK ที่คุณกำลังใช้งานอยู่

MessageDialog.show(activityOrFragment, content);

คุณสมบัติเพิ่มเติม

เมื่อคุณใช้กล่องการแชร์ Facebook คุณจะมีตัวเลือกเพิ่มเติมที่ไม่สามารถใช้งานได้เมื่อคุณแชร์โดยการใช้ API

แฮชแท็ก

คุณสามารถระบุแฮชแท็กเดี่ยวให้ปรากฏพร้อมกับรูปภาพ ลิงก์ หรือวิดีโอที่แชร์ได้ แฮชแท็กนี้จะปรากฏในกล่องการแชร์ด้วยเช่นกัน และผู้ใช้จะมีโอกาสลบออกก่อนที่จะเผยแพร่ได้

ต่อไปนี้คือตัวอย่างของการเพิ่มแฮชแท็กไปยังการแชร์ลิงก์

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setShareHashtag(new ShareHashtag.Builder()
                .setHashtag("#ConnectTheWorld")
                .build());
        .build();

การแชร์คำพูดอ้างอิง

คุณสามารถอนุญาตให้ผู้ใช้ไฮไลท์ข้อความให้ปรากฏเป็นคำพูดอ้างอิงไปกับลิงก์ที่แชร์ นอกจากนี้ คุณยังสามารถกำหนดคำพูดอ้างอิงล่วงหน้าอย่างเช่น ข้อความไฮไลท์ในบทความ ให้ปรากฏพร้อมลิงก์ที่แชร์ได้ด้วย ในทั้งสองกรณี คำพูดอ้างอิงจะปรากฏในช่องของตนซึ่งแยกอยู่คนละส่วนกับความคิดเห็นของผู้ใช้

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setQuote("Connect on a global scale.")
        .build();

หัวข้อขั้นสูง

ตัวสำรองสำหรับการแชร์แบบสร้างไว้ภายใน

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

ในขณะนี้ SDK จะตรวจสอบแอพ Facebook แบบเนทีฟให้โดยอัตโนมัติ หากยังไม่ได้ติดตั้งแอพไว้ SDK จะนำผู้ใช้สลับไปที่เบราว์เซอร์เริ่มต้นของตนและเปิด “กล่องการแชร์บนฟีด” หากมีคนต้องการแชร์ข้อมูล Open Graph ใดๆ SDK จะเปิดกล่องการแชร์ในเว็บ

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

อินเทอร์เฟซแบบกำหนดเอง

หากต้องการใช้อินเทอร์เฟซของคุณเองในการแชร์ คุณจะต้องดำเนินการต่อไปนี้

รหัสในการโพสต์ลิงก์ไปยัง Facebook จากอินเทอร์เฟซของคุณเองมีดังนี้

ShareApi.share(content, null);

การแชรเรื่องราวจาก Open Graph

เรื่องราวจาก Open Graph ช่วยให้ผู้ใช้แชร์เนื้อหาที่จัดโครงสร้างไว้เป็นอย่างดีผ่าน API ที่จัดประเภทไว้อย่างชัดเจนซึ่งระบุโดยการดำเนินการและอ็อบเจ็กต์ Open Graph โพสต์เหล่านี้จะเชื่อมโยงกลับไปยังแอพของคุณหรือเพจ App Store ของแอพของคุณ

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีกำหนดค่าเรื่องราวจาก Open Graph โปรดดูเรื่องราวจาก Open Graph ใน Android

สร้างเนื้อหาที่จะแชร์สำหรับการดำเนินการ Open Graph ลงในโมเดล ShareOpenGraphContent โปรดดูรายการแอตทริบิวต์ทั้งหมดในข้อมูลอ้างอิง ShareOpenGraphContent

ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
        .putString("og:type", "fitness.course")
        .putString("og:title", "Sample Course")
        .putString("og:description", "This is a sample course.")
        .putInt("fitness:duration:value", 100)
        .putString("fitness:duration:units", "s")
        .putInt("fitness:distance:value", 12)
        .putString("fitness:distance:units", "km")
        .putInt("fitness:speed:value", 5)
        .putString("fitness:speed:units", "m/s")
        .build();
ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
        .setActionType("fitness.runs")
        .putObject("fitness:course", object)
        .build();
ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
        .setPreviewPropertyName("fitness:course")
        .setAction(action)
        .build();