ACTION_SEND aracılığıyla Android Uygulamasından Facebook'ta Metin Paylaşın


91

Bir Android uygulamam var ve diğer uygulamalar aracılığıyla metin göndermeyi destekliyor. Bu nedenle ACTION_SENDamacı ve EXTRA_TEXTalanı kullanır . Seçici bana böyle bir amacı karşılayabilecek tüm uygulamaları sunar. Bunlar Twitter, E-posta ... ve Facebook. Ancak Facebook'u seçtiğimde tarayıcıyı açar ve aşağıdaki sayfaya gider:

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

Metnimi ve gönder düğmesini gösterir. Ancak gönder düğmesine bastığımda hiçbir şey olmuyor. Sayfa yeniden yükleniyor. Belki de URL'leri sadece Facebook Uygulaması aracılığıyla göndermenin mümkün olduğunu düşünüyorum. Bu olabilir mi?

ACTION_SENDFacebook Android uygulaması aracılığıyla metin göndermeyi başaran oldu mu?


4
Bu SO gönderisini ziyaret ederseniz ve facebook uygulamasının ACTION_SEND'ı düzgün bir şekilde desteklemediğinden rahatsızsanız, lütfen yayınınızı aşağıdaki konuya eklemek için zaman ayırın: forum.developers.facebook.net/viewtopic.php?id=93900
Hata 454

7
21-3-2012'nin hala çözülmediğini tahmin ediyorum? Çünkü onu çalıştıramıyorum ..
Diego

1
Developers.facebook.com/bugs/332619626816423 - Görünüşe göre facebook tasarım ekibi, bir mesajı önceden doldurmak politikalarına aykırı olduğu için bunu kapattı :(
Brett

1
@Brett Bu çok saçma. Sadece SDK'larını projenize eklemenizi istiyorlar.
theblang

2
17 Mayıs 2015 - hala facebook ile çalışmıyor.
Faisal Asif

Yanıtlar:


11

DÜZENLENMİŞ: Android için resmi Facebook uygulamasının yeni sürümüyle (14 Temmuz 2011) ÇALIŞIYOR !!!

ESKİ: Kullanıcı Facebook uygulamasını paylaşım için seçerse yukarıdaki örnekler işe yaramaz, ancak kullanıcı Facebook'a göndermek için Seesmic uygulamasını seçerse çalışır. Sanırım Seesmic, Facebook API'sinin Facebook'tan daha iyi bir uygulamasına sahip!


Facebook 1.6.1 sürümünde çalışmıyor ve gönderirken bazı ek hatalar var gibi görünüyor!
sat

Çalışmaya başladı! Sorunun ne olduğunu bilmiyorum. Teşekkürler FB v 1.6.1 ile de çalışır.
oturdu

8
Bu cevap facebook uygulaması sürümünde 1.6.2 çıktığından beri yanlış developers.facebook.com/bugs/363863587019268
alaeri

51

Paylaşımın facebook uygulamasıyla çalışmasını sağlamak için, en az bir bağlantıya sahip olmanız yeterlidir:

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

Bu doğru paylaşım penceresini gösterecek, ancak paylaşıma tıkladığınızda hiçbir şey olmuyor (Resmi Twitter Uygulaması ile de denedim, çalışmıyor).

Facebook uygulama paylaşımını çalıştırmanın tek yolu, yalnızca metin içermeyen bir bağlantıyı paylaşmaktır:

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

Aşağıdaki pencereyi gösterecek ve Paylaş düğmesi çalışacaktır:

Facebook paylaşımı

Görünüşe göre, paylaşımı doldurmak için bağlantıdan otomatik olarak bir resim ve metin alıyor.

Yalnızca metin paylaşmak istiyorsanız, facebook api'yi kullanmanız gerekecek: https://github.com/facebook/facebook-android-sdk


4
"Harika arama motoru" metni nerede? İnsanların yukarıda bildirdiği hatanın aynısı, değil mi?
Kyle Clegg

3
Sadece bir bağlantı gönderebileceğini söylüyor. Yazı yok. "Harika arama motoru" metninin çalışması için çıkarılması gerekiyordu.
chubbsondubs

Cevabı güncellerseniz + 1'leyeceğim. Şu an itibariyle Facebookuygulama, bağlantıyı bir dizeden doğru şekilde çekecektir Wonderful search engine http://www.google.fr/. Bağlantıyı çek dedim , yine de metinle hiçbir şey yapmayacak. Ayrıca Twitterhem metinle hem de bağlantıyla çalışır.
theblang

45

06/2013:

  • Bu Facebook'tan gelen bir hata, kodunuz değil
  • Facebook bu hatayı DÜZELTMEYECEK, Android paylaşım sistemini kırdıklarının "tasarım gereği" olduğunu söylüyorlar : https://developers.facebook.com/bugs/332619626816423
  • SDK'yı kullanın veya yalnızca URL'yi paylaşın.
  • İpuçları: Web sayfası başlığını gönderi metni olarak kullanarak biraz hile yapabilirsiniz.

28
Çok teşekkürler Faceobook. </sarcasm>
mr_lou

Bizim dikkat çeken için teşekkürler @Loda
Jigar

28

Öncelikle işleyiciye yönelik sorgulama seçeneğine ihtiyacınız var. Ardından, Niyeti filtrelemek için paket adını kullanın, ardından işleyici paylaşma seçeneğine sahip tek bir Niyetimiz olacaktır!

Facebook üzerinden paylaş

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 - Twitter ile paylaşın

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

Ve başka bir paylaşım uygulaması aracılığıyla nasıl paylaşılacağını öğrenmek istiyorsanız, orada bulun Tép Blog - Android üzerinden önceden paylaşın


13
Hala facebook ve twitter'da metin paylaşamadığınız yolları kullanarak (sadece bağlantı) Android için SDK Facebook (Twitter) kullanmalısınız.
secretlm

Merhaba, bunu denedim ama facebook'ta paylaşmak istediğim mesajı göstermedi ... Neden? Giriş yapmamı istiyor ve "Aklınızda ne var?" ipucu metni, paylaşmak istediğim gerçek metin değil
Ramesh Sangili

Bu çalışmıyor. Normal (iletişim kutusu) amaç ile aynı boş girişi gösterir.
Ixx

3
ancak twitter metinleri kolayca yayınlanır
Trikaldarshiii

1
Facebook için çalışmaz ve Twitter'da paylaşımı etkinleştirmek için amaç bileşenini ayarlamaya gerek yoktur.
Juozas Kontvainis

11

Bu yüzden bir çalışmam var, ancak paylaştığınız sayfa üzerinde kontrolünüz olduğunu varsayıyor ...

EXTRA_TEXT öğenizi bu şekilde biçimlendirirseniz ...

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

... daha sonra Facebook dışı uygulamalarda, metniniz aşağıdaki gibi görünmelidir:

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

Hey!
Bu güzel bir fotoğraf!

Şimdi, web sitenizi extraText sorgu parametresi ile yapılan istekler sayfanın meta verilerinde extraText içeriğini döndürür şekilde güncellerseniz.

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

Ardından Facebook, iletişim kutusunu oluşturmak için bu url'den kaçtığında, başlık meta verilerini okuyacak ve bunu paylaşım iletişim kutunuza yerleştirecektir.

Bunun oldukça iğrenç bir çözüm olduğunun farkındayım, bu yüzden biraz tuzla al ...


(artı bir) xkcd referansı için.
Aamir Abro

2

Görünüşe göre Facebook uygulaması bu amacı yanlış ele alıyor. En güvenilir yol, Android için Facebook API'sini kullanmak gibi görünüyor.

SDK şu bağlantıdadır: http://github.com/facebook/facebook-android-sdk

'Kullanım' altında bu var:

Bir Facebook diyaloğu görüntüleyin.

SDK, bir duvar yazısı oluşturma gibi kullanıcı etkileşimleri için birkaç WebView html iletişim kutusunu destekler. Bu, yerel bir Android kullanıcı arayüzü uygulamak ve API'ler aracılığıyla doğrudan Facebook'a veri aktarmak zorunda kalmadan hızlı Facebook işlevselliği sağlamayı amaçlamaktadır.

Bunu yapmanın en iyi yolu bu gibi görünüyor - duvara gönderilecek bir iletişim kutusu görüntüleyin. Tek sorun, önce oturum açmaları gerekebilmesidir


Pekala, istediğim tam olarak bu değildi. Ama yine de ipucu için teşekkürler. Bunun işe yaraması için facebook paylaşımına ayrı bir menü öğesi eklemem gerekir ...
Goddchen

Evet, ne demek istediğini anladım ve bu bir kaltak ama uygulamamdaki ACTION_SEND amacı ile aynı sorunu yaşadım ve Facebook uygulamalarını düzeltmedi, bu yüzden bu en iyi alternatif gibi görünüyor
HXCaine

3
Biraz daha araştırma yaptım ve internetin her yerinde bu sorunu yaşayan insanlar olduğunu ve Facebook'un hiç yardımcı olmadığını gördüm. 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 uygulamasında Nisan 2011'de bildirilen bir hata olduğu ve henüz Android Facebook geliştiricileri tarafından düzeltilmesi gereken bir hata olduğu anlaşılıyor.

Şu an için tek çözüm SDK'larını kullanmaktır.


2
Sanırım web uygulamasını kullanarak paylaşılabilir içeriği arkadaşlarınızla paylaşmanızı istiyorlar, böylece de Ads'i görebilirsiniz ... Aynı sorunla karşılaşıyorum ve facebook api üzerinden Facebbok paylaşımını uygulayacağım.
Igor

0

Metni göstermek istiyorsanız, istediğiniz mesajın başına # koyun , bunu Hashtag olarak paylaşacaktır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.