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?

Goddchen
sumber
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!

Giulio Prisco
sumber
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

ol_v_er
sumber
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.
Loda
sumber
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

Khai Nguyen
sumber
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 ...

Joseph Lee
sumber
(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

HXCaine
sumber
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
Vinod Joshi
sumber
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);

}
Ram Bhawan Kushwaha
sumber
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.

Joseph Woodward
sumber
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

MFQ
sumber