Bagikan Teks di Facebook dari Aplikasi Android melalui ACTION_SEND


91

Saya memiliki aplikasi Android dan mendukung pengiriman teks melalui aplikasi lain. Oleh karena itu, ia menggunakan ACTION_SENDmaksud dan EXTRA_TEXTbidang. Pemilih memberi saya semua aplikasi yang bisa menangani maksud seperti itu. Itu adalah Twitter, Email, ... dan Facebook. Tetapi ketika saya memilih Facebook, browser akan terbuka dan membuka halaman berikut:

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

Ini menunjukkan teks saya dan tombol kirim. Tetapi ketika saya menekan tombol kirim tidak ada yang terjadi. Halaman baru saja dimuat lagi. Saya pikir mungkin hanya mungkin mengirim URL melalui Aplikasi Facebook. Mungkinkah itu?

Apakah ada yang berhasil mengirim teks melalui ACTION_SENDaplikasi Facebook Android?


4
Jika Anda mengunjungi postingan SO ini dan merasa frustrasi karena aplikasi facebook tidak mendukung ACTION_SEND dengan baik, luangkan waktu untuk menambahkan postingan Anda ke topik berikut: forum.developers.facebook.net/viewtopic.php?id=93900
Error 454

7
Saya menduga 21-3-2012 masih belum terpecahkan? Karena saya tidak bisa membuatnya bekerja ..
Diego

1
developers.facebook.com/bugs/332619626816423 - Sepertinya tim desain facebook telah menutup yang ini karena pra-pengisian pesan melanggar kebijakan mereka :(
Brett

1
@Brett Itu benar-benar konyol. Mereka hanya ingin membuat Anda menambahkan SDK mereka ke proyek Anda.
theblang

2
17 Mei 2015 - masih belum berfungsi dengan facebook.
Faisal Asif

Jawaban:


11

DIEDIT: dengan rilis baru aplikasi Facebook resmi untuk Android (14 Juli 2011) BERHASIL !!!

LAMA: Contoh di atas tidak berfungsi jika pengguna memilih aplikasi Facebook untuk berbagi, tetapi berfungsi jika pengguna memilih aplikasi Seesmic untuk memposting ke Facebook. Saya kira Seesmic memiliki implementasi API Facebook yang lebih baik daripada Facebook!


Di Facebook versi 1.6.1 itu tidak berfungsi, dan beberapa bug tambahan tampaknya ada di sana saat mengirim!
duduk

Ini mulai bekerja! Tidak tahu apa masalahnya. Terima kasih, ini juga berfungsi dengan FB v 1.6.1.
duduk

8
Jawaban ini salah sejak rilis aplikasi facebook versi 1.6.2: developers.facebook.com/bugs/363863587019268
alaeri

51

Agar Berbagi berfungsi dengan aplikasi facebook, Anda hanya perlu menyediakan setidaknya satu tautan:

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"));

Ini akan menampilkan jendela berbagi yang benar tetapi ketika Anda mengklik bagikan, tidak ada yang terjadi (saya juga mencoba dengan Aplikasi Twitter resmi, itu tidak berfungsi).

Satu-satunya cara yang saya temukan untuk membuat berbagi aplikasi Facebook berfungsi adalah dengan hanya membagikan tautan tanpa teks:

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"));

Ini akan menunjukkan jendela berikut dan tombol Bagikan akan berfungsi:

berbagi facebook

Rupanya itu secara otomatis mengambil gambar dan teks dari tautan untuk mengisi bagian.

Jika Anda hanya ingin membagikan teks, Anda harus menggunakan api facebook: https://github.com/facebook/facebook-android-sdk


4
Di manakah teks "Mesin telusur hebat"? Itu bug yang sama yang dilaporkan orang di atas, ya?
Kyle Clegg

3
Dia mengatakan Anda hanya dapat memposting tautan. Tidak ada teks. Teks "Mesin pencari yang luar biasa" harus dihapus agar dapat berfungsi.
chubbsondubs

Saya akan memberi +1 jika Anda memperbarui jawabannya. Mulai sekarang Facebookaplikasi akan menarik tautan dengan benar dari string seperti Wonderful search engine http://www.google.fr/. Perhatikan bahwa saya mengatakan tarik tautan , itu masih tidak akan melakukan apa pun dengan teks. Juga, Twitterberfungsi dengan teks dan tautan.
theblang

45

06/2013:

  • Ini adalah bug dari Facebook, bukan kode Anda
  • Facebook TIDAK akan memperbaiki bug ini , mereka mengatakan "dengan sengaja" mereka merusak sistem berbagi Android: https://developers.facebook.com/bugs/332619626816423
  • gunakan SDK atau bagikan URL saja.
  • Tips: Anda bisa sedikit curang menggunakan judul halaman web sebagai teks untuk posting.

28
Terima kasih banyak Faceobook. </
sarcasm

Terima kasih @Loda karena telah menarik perhatian kami
Jigar

28

Pertama, Anda perlu query Intent to handler sharing option. Kemudian gunakan nama paket untuk memfilter Intent maka kita hanya akan memiliki satu Intent yang merupakan opsi berbagi penangan!

Bagikan melalui 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;
   }
}

Bonus - Bagikan melalui 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;
   }
}

Dan jika Anda ingin mencari cara untuk berbagi melalui aplikasi berbagi lainnya, temukan di sana Tép Blog - Berbagi lebih lanjut melalui Android


13
Menggunakan cara Anda tetap tidak bisa berbagi teks (link saja) di facebook dan twitter. Anda harus menggunakan SDK Facebook (Twitter) untuk Android.
secretlm

Halo, saya mencoba ini, tetapi tidak menunjukkan pesan bahwa saya ingin Berbagi di facebook ... Tahu kenapa? Ini meminta saya untuk masuk dan menunjukkan "Apa yang ada dalam pikiran Anda?" teks petunjuk bukan teks sebenarnya yang ingin saya bagikan
Ramesh Sangili

Ini tidak berhasil. Ini menunjukkan input kosong yang sama dengan maksud (dialog) normal.
Ixx

3
tetapi di twitter teks dengan mudah diposting
Trikaldarshiii

1
Tidak berfungsi untuk Facebook, dan untuk mengaktifkan berbagi di Twitter tidak perlu menyetel komponen maksud.
Juozas Kontvainis

11

Jadi saya punya solusi, tetapi Anda berasumsi bahwa Anda memiliki kendali atas halaman yang Anda bagikan ...

Jika Anda memformat EXTRA_TEXT Anda seperti ini ...

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

... lalu di aplikasi non-Facebook, teks Anda akan muncul seperti ini:

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

Hai!
Ini foto yang bagus!

Sekarang jika Anda mengupdate situs Anda sehingga meminta dengan parameter kueri extraText mengembalikan konten extraText di meta data halaman.

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

Kemudian ketika Facebook keluar dari url itu untuk menghasilkan dialog, itu akan membaca meta data judul dan menyematkannya ke dalam dialog share Anda.

Saya menyadari ini adalah solusi yang cukup yuck, jadi ambillah dengan sebutir garam ...


(ditambah satu) untuk referensi xkcd.
Aamir Abro

2

Tampaknya aplikasi Facebook menangani hal ini dengan tidak benar. Cara yang paling dapat diandalkan tampaknya menggunakan API Facebook untuk Android.

SDK ada di tautan ini: http://github.com/facebook/facebook-android-sdk

Di bawah 'penggunaan', ada ini:

Tampilkan dialog Facebook.

SDK mendukung beberapa dialog html WebView untuk interaksi pengguna, seperti membuat kiriman dinding. Ini dimaksudkan untuk menyediakan fungsionalitas Facebook yang cepat tanpa harus menerapkan UI Android asli dan meneruskan data ke facebook secara langsung melalui API.

Ini sepertinya cara terbaik untuk melakukannya - tampilkan dialog yang akan dikirim ke dinding. Satu-satunya masalah adalah mereka mungkin harus masuk terlebih dahulu


Yah, bukan itu yang saya minta. Tapi terima kasih untuk petunjuknya. Saya perlu menambahkan item menu terpisah untuk berbagi facebook agar ini berfungsi ...
Goddchen

Ya, saya mengerti apa yang Anda maksud dan itu menyebalkan tetapi saya memiliki masalah yang sama dengan maksud ACTION_SEND di aplikasi saya dan Facebook belum memperbaiki aplikasinya, jadi ini tampaknya menjadi alternatif terbaik
HXCaine

3
Saya baru saja melakukan pencarian lagi dan menemukan bahwa ada banyak orang di internet dengan masalah ini dan Facebook tidak membantu sama sekali. 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

Tampaknya ini adalah bug di aplikasi Facebook yang dilaporkan pada bulan April 2011 dan masih belum diperbaiki oleh pengembang Facebook Android.

Satu-satunya solusi untuk saat ini adalah dengan menggunakan SDK mereka.


2
Saya pikir mereka ingin Anda menggunakan aplikasi web untuk berbagi konten yang dapat dibagikan dengan teman-teman, sehingga Anda dapat melihat de Ads ... Saya dengan masalah yang sama dan saya akan menerapkan berbagi Facebbok melalui api facebook.
Igor

0

jika Anda ingin menampilkan teks, letakkan # di bagian memohon pada pesan yang Anda inginkan, maka akan dibagikan sebagai Hashtag

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.