แบ่งปันข้อความบน 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.