แบ่งปันข้อความบน Facebook จากแอป Android ผ่าน ACTION_SEND


91

ฉันมีแอพ Android และรองรับการส่งข้อความผ่านแอพอื่น ๆ มันจึงใช้ACTION_SENDเจตนาและEXTRA_TEXTสนาม ตัวเลือกนำเสนอแอปทั้งหมดที่สามารถจัดการกับเจตนาดังกล่าวได้ ได้แก่ Twitter, Email, ... และ Facebook แต่เมื่อฉันเลือก Facebook มันจะเปิดเบราว์เซอร์และไปที่หน้าต่อไปนี้:

http://m.facebook.com/sharer.php?u=mytext

มันแสดงข้อความของฉันและปุ่มส่ง แต่เมื่อฉันกดปุ่มส่งไม่มีอะไรเกิดขึ้น หน้าเพิ่งโหลดอีกครั้ง ฉันคิดว่าอาจเป็นไปได้ที่จะส่ง URL ผ่านแอพ Facebook เท่านั้น อาจจะเป็น?

มีใครจัดการส่งข้อความACTION_SENDผ่านแอพ Facebook Android หรือไม่?


4
หากคุณเยี่ยมชมโพสต์ SO นี้และรู้สึกไม่สบายใจที่
— ข้อผิดพลาด 454

7
ฉันเดาว่า 21-3-2012 ยังไม่ได้รับการแก้ไข? เพราะฉันไม่สามารถทำงานได้ ..
— Diego

1
Developers.facebook.com/bugs/332619626816423 - ดูเหมือนว่าทีมออกแบบของ Facebook จะปิดโปรแกรมนี้เนื่องจากการกรอกข้อความล่วงหน้าขัดต่อนโยบายของพวกเขา :(
— Brett

1
@Brett นั่นมันไร้สาระมาก พวกเขาแค่ต้องการให้คุณเพิ่ม SDK ลงในโครงการของคุณ
— theblang

2
17 พฤษภาคม 2558 - ยังใช้งานกับ Facebook ไม่ได้
— Faisal Asif

คำตอบ:


11

แก้ไข: ด้วยการเปิดตัวใหม่ของแอป Facebook อย่างเป็นทางการสำหรับ Android (14 กรกฎาคม 2554) ได้ผล!!!

เก่า: ตัวอย่างด้านบนใช้ไม่ได้หากผู้ใช้เลือกแอพ Facebook เพื่อแชร์ แต่จะได้ผลหากผู้ใช้เลือกแอพ Seesmic เพื่อโพสต์ไปที่ Facebook ฉันเดาว่า Seesmic มีการใช้งาน Facebook API ได้ดีกว่า Facebook!


ใน Facebook เวอร์ชัน 1.6.1 ใช้งานไม่ได้และดูเหมือนว่ามีข้อบกพร่องเพิ่มเติมบางอย่างขณะส่ง!
— ส

มันเริ่มทำงาน! ไม่รู้ว่าเกิดปัญหาอะไร ขอบคุณที่ทำงานกับ FB v 1.6.1 ด้วย
— ส

8
คำตอบนี้ไม่ถูกต้องตั้งแต่เปิดตัวแอพ facebook เวอร์ชัน 1.6.2: developers.facebook.com/bugs/363863587019268
— alaeri

51

เพื่อให้การแชร์ทำงานกับแอพ facebook คุณจะต้องมีลิงค์อย่างน้อยหนึ่งลิงก์เท่านั้น

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Wonderful search engine http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

นี่จะแสดงหน้าต่างการแบ่งปันที่ถูกต้อง แต่เมื่อคุณคลิกที่แชร์ไม่มีอะไรเกิดขึ้น (ฉันลองใช้กับแอป Twitter อย่างเป็นทางการแล้วมันใช้ไม่ได้)

วิธีเดียวที่ฉันพบในการทำให้การแชร์แอพ Facebook ทำงานได้คือการแชร์เฉพาะลิงก์ที่ไม่มีข้อความ:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

จะแสดงหน้าต่างต่อไปนี้และปุ่ม Share จะทำงาน:

แบ่งปัน facebook

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

หากคุณต้องการแบ่งปันเฉพาะข้อความคุณจะต้องใช้ API ของ Facebook: https://github.com/facebook/facebook-android-sdk


4
ข้อความ "เครื่องมือค้นหาที่ยอดเยี่ยม" อยู่ที่ไหน นั่นคือข้อผิดพลาดเดียวกันกับที่ผู้คนรายงานข้างต้นใช่ไหม
— Kyle Clegg

3
เขาบอกว่าคุณโพสต์ได้แค่ลิงค์ ไม่มีข้อความ ข้อความ "เครื่องมือค้นหาที่ยอดเยี่ยม" จะต้องถูกลบออกเพื่อให้สามารถใช้งานได้
— chubbsondubs

ฉันจะ +1 ถ้าคุณอัปเดตคำตอบ ณ ตอนนี้แอปอย่างถูกต้องจะดึงการเชื่อมโยงจากสตริงเหมือนFacebook Wonderful search engine http://www.google.fr/โปรดทราบว่าฉันบอกว่าดึงลิงค์แต่ก็ยังไม่ทำอะไรกับข้อความ นอกจากนี้ยังใช้Twitterงานได้กับทั้งข้อความและลิงก์
— theblang

45

06/2556:

  • นี่คือบั๊กจาก Facebook ไม่ใช่รหัสของคุณ
  • Facebook จะไม่แก้ไขข้อบกพร่องนี้พวกเขาบอกว่ามันเป็น "โดยการออกแบบ"ที่พวกเขาทำลายระบบแชร์ของ Android: https://developers.facebook.com/bugs/332619626816423
  • ใช้ SDK หรือแชร์เฉพาะ URL
  • เคล็ดลับ: คุณสามารถโกงเล็กน้อยโดยใช้ชื่อหน้าเว็บเป็นข้อความสำหรับโพสต์

28
ขอบคุณมาก Faceobook </
— sarcasm

ขอบคุณ @Loda ที่ดึงดูดความสนใจของเรา
— Jigar

28

ก่อนอื่นคุณต้องมีตัวเลือกการแบ่งปัน Intent to handler sharing จากนั้นใช้ชื่อแพ็กเกจเพื่อกรอง Intent จากนั้นเราจะมีตัวเลือกการแชร์ตัวจัดการ Intent เพียงตัวเดียวเท่านั้น!

แบ่งปันผ่าน Facebook

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ((app.activityInfo.name).contains("facebook")) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

โบนัส - แบ่งปันผ่าน Twitter

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

และหากคุณต้องการค้นหาวิธีการแบ่งปันผ่านแอปพลิเคชันการแบ่งปันอื่น ๆ ให้ค้นหาที่นั่นTép Blog - แบ่งปันล่วงหน้าผ่าน Android


13
ใช้วิธีที่คุณยังไม่สามารถแบ่งปันข้อความ (เพียงลิงค์) ใน Facebook และ Twitter คุณต้องใช้ SDK Facebook (Twitter) สำหรับ Android
— secretlm

สวัสดีฉันลองแล้ว แต่มันไม่แสดงข้อความที่ฉันต้องการแบ่งปันบน facebook ... มีความคิดว่าทำไม? มันขอให้ฉันเข้าสู่ระบบและแสดงว่า "คุณคิดอะไรอยู่" คำใบ้ไม่ใช่ข้อความจริงที่ฉันต้องการแบ่งปัน
— Ramesh Sangili

วิธีนี้ใช้ไม่ได้ มันแสดงอินพุตว่างเช่นเดียวกับเจตนา (กล่องโต้ตอบ) ปกติ
— Ixx

3
แต่ข้อความบน Twitter สามารถโพสต์ได้อย่างง่ายดาย
— Trikaldarshiii

1
ใช้ไม่ได้กับ Facebook และในการเปิดใช้งานการแชร์บน Twitter ไม่จำเป็นต้องตั้งค่าองค์ประกอบความตั้งใจ
— Juozas Kontvainis

11

ดังนั้นฉันจึงมีวิธีแก้ไข แต่ถือว่าคุณสามารถควบคุมเพจที่คุณแชร์ได้ ...

หากคุณจัดรูปแบบ EXTRA_TEXT ของคุณเช่นนั้น ...

String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;

... จากนั้นในแอพที่ไม่ใช่ Facebook ข้อความของคุณควรปรากฏดังนี้:

http://www.example.com/myPicPage.html?extraText=

เฮ้!
นี่คือรูปที่เรียบร้อย!

ตอนนี้หากคุณอัปเดตเว็บไซต์ของคุณในลักษณะที่ร้องขอด้วยพารามิเตอร์การสืบค้น extraText จะส่งคืนเนื้อหาของ extraText ในข้อมูลเมตาของหน้า

<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ -->
<meta name="title" content="Hey! this is a neat pic!">

จากนั้นเมื่อ Facebook หนี URL นั้นเพื่อสร้างกล่องโต้ตอบมันจะอ่านข้อมูลเมตาชื่อเรื่องและฝังลงในกล่องโต้ตอบการแชร์

ฉันรู้ว่านี่เป็นวิธีแก้ปัญหาที่ค่อนข้างแย่ดังนั้นควรใช้เกลือสักเม็ด ...


(บวกหนึ่ง) สำหรับการอ้างอิง xkcd
— Aamir Abro

2

ดูเหมือนว่าแอพ Facebook จัดการเจตนานี้ไม่ถูกต้อง วิธีที่น่าเชื่อถือที่สุดคือใช้ Facebook API สำหรับ Android

SDK อยู่ที่ลิงค์นี้: http://github.com/facebook/facebook-android-sdk

ภายใต้ 'การใช้งาน' มีสิ่งนี้:

แสดงกล่องโต้ตอบ Facebook

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

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


นั่นไม่ใช่สิ่งที่ฉันขอ แต่ยังไงก็ขอบคุณสำหรับคำใบ้ ฉันจะต้องเพิ่มรายการเมนูแยกต่างหากสำหรับการแชร์บน Facebook เพื่อให้ทำงานนี้ ...
— Goddchen

ใช่ฉันเข้าใจว่าคุณหมายถึงอะไรและมันก็บ้า แต่ฉันมีปัญหาเดียวกันกับ ACTION_SEND เจตนาในแอปพลิเคชันของฉันและ Facebook ยังไม่ได้แก้ไขแอปของพวกเขาดังนั้นนี่จึงเป็นทางเลือกที่ดีที่สุด
— HXCaine

3
ฉันเพิ่งทำการค้นหาเพิ่มเติมและพบว่ามีผู้คนทั่วอินเทอร์เน็ตที่มีปัญหานี้และ Facebook ไม่ได้ช่วยอะไรเลย forum.developers.facebook.net/viewtopic.php?pid=255227
— HXCaine

1
Check this out : By this we can check activity results also....
// Open all sharing option for user
                    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
                    sharingIntent.setType("text/plain");                    
                    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ShortDesc+" from "+BusinessName);
                    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, ShortDesc+" "+ShareURL);
                    sharingIntent.putExtra(Intent.EXTRA_TITLE, ShortDesc+" "+ShareURL);
                    startActivityForResult(Intent.createChooser(sharingIntent, "Share via"),1000);
/**
     * Get the result when we share any data to another activity 
     * */
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
        case 1000:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(getApplicationContext(), "Activity 1 returned NOT OK", Toast.LENGTH_LONG).show();
            break;
        case 1002:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
            break;
        }// end switch



    }// end onActivityResult

1
ShareDialog shareDialog = new ShareDialog(this);
if(ShareDialog.canShow(ShareLinkContent.class)) {

    ShareLinkContent linkContent = new ShareLinkContent.Builder().setContentTitle(strTitle).setContentDescription(strDescription)
                            .setContentUrl(Uri.parse(strNewsHtmlUrl))
                            .build();
    shareDialog.show(linkContent);

}

0

ดูเหมือนว่าจะเป็นข้อบกพร่องในแอพ Facebook ที่รายงานเมื่อเดือนเมษายน 2554 และยังไม่ได้รับการแก้ไขโดยนักพัฒนา Android Facebook

วิธีแก้ปัญหาเดียวในขณะนี้คือการใช้ SDK


2
ฉันคิดว่าพวกเขาต้องการให้คุณใช้แอปพลิเคชันเว็บเพื่อแบ่งปันเนื้อหาที่แชร์กับเพื่อน ๆ เพื่อที่คุณจะได้เห็นโฆษณา ... ฉันมีปัญหาเดียวกันและฉันจะใช้การแชร์ Facebbok ผ่าน Facebook API
— Igor

0

หากคุณต้องการแสดงข้อความใส่#ที่ขอทานข้อความที่คุณต้องการจะแชร์เป็น Hashtag

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