Udostępnij tekst na Facebook z aplikacji Android za pomocą akcji wyślij

Mam aplikację na Androida i obsługuje wysyłanie tekstu przez inne aplikacje. Dlatego używa pola ACTION_SEND intent i EXTRA_TEXT. Wybierający przedstawia mi wszystkie aplikacje, które mogą obsłużyć taki zamiar. To Twitter, e-mail, ... i Facebook. Ale kiedy wybieram Facebook otwiera przeglądarkę i przechodzi do następującej strony:

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

Pokazuje mój tekst i przycisk submit. Ale kiedy nacisnę przycisk submit nic happends. Strona po prostu ładuje się ponownie. Myślę, że możliwe jest tylko wysyłanie adresów URL za pośrednictwem aplikacji Facebook. Czy to możliwe?

Czy komuś udało się wysłać tekst przez ACTION_SEND poprzez aplikację Facebook Android?

Author: M.G, 2010-08-18

10 answers

Edytowane: z nowym wydaniem oficjalnej aplikacji Facebook dla Androida (lipiec 14 2011) to działa!!!

Facebook facebook app do udostępniania, ale działają, jeśli użytkownik wybierze Seesmic app do publikowania na Facebooku. * * * * * * * * * * * dlaczego ukryte? * * * * * * * * * * * dlaczego ukryte? * * * * * * * * * * * dlaczego ukryte? * * * * * * * * * * * Chyba Facebook Facebook ma lepszą implementację interfejsu API niż Facebook!!!!!!!!!!!.!!!!!!!!!!!
 11
Author: Giulio Prisco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-14 08:21:49

Aby udostępnić aplikację facebook, wystarczy mieć przynajmniej jeden link:

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

To pokaże prawidłowe okno udostępniania, ale po kliknięciu Udostępnij, nic się nie dzieje (próbowałem również z oficjalnej aplikacji Twitter, to nie działa).

Jedynym sposobem, w jaki znalazłem, aby udostępnianie aplikacji Facebook działa, jest udostępnienie tylko linku bez tekstu:

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

Wyświetli się następujące okno, a przycisk Udostępnij praca:

Facebook share

Najwyraźniej automatycznie pobiera obraz i tekst z łącza, aby wypełnić udział.

Jeśli chcesz udostępniać tylko tekst, musisz użyć facebook api: https://github.com/facebook/facebook-android-sdk

 51
Author: ol_v_er,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-11 09:37:20

06/2013 :

  • to jest bug z Facebook ' a, nie twój kod
  • Facebook nie naprawi tego błędu , mówią to "z założenia" że złamali system udostępniania Androida: https://developers.facebook.com/bugs/332619626816423
  • Użyj SDK lub udostępnij tylko URL.
  • Porady: możesz trochę oszukać, używając tytułu strony jako tekstu dla posta.
 45
Author: Loda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-05 07:28:04

Najpierw potrzebujesz query Intent to handler sharing option. Następnie użyj nazwy pakietu do filtrowania intencji wtedy będziemy mieli tylko jedną intencję, że opcja udostępniania Handlera!

Udostępnij przez 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-Udostępnij za pośrednictwem Twittera

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

A jeśli chcesz dowiedzieć się, jak udostępnić za pośrednictwem innej aplikacji do udostępniania, znajdź ją tam Tép Blog-Advance share via Android

 28
Author: khaintt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-01 09:00:01

Więc mam trochę pracy, ale zakłada, że masz kontrolę nad stroną, którą udostępniasz...

Jeśli sformatujesz swój EXTRA_TEXT w ten sposób...

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

... następnie w aplikacjach innych niż Facebook, Twój tekst powinien pojawić się mniej więcej tak:

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

Hej!
Fajna fotka!

Teraz jeśli zaktualizujesz swoją stronę tak, że żądania z parametrem zapytania extraText zwracają zawartość extraText w metadanych strony.

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

Następnie, gdy Facebook ucieknie tego adresu URL, aby wygenerować okno dialogowe, będzie czytać metadane tytuł i osadzić je w oknie dialogowym udostępniania.

Zdaję sobie sprawę, że to dość Fuj rozwiązanie, więc weź z przymrużeniem oka...
 11
Author: Joseph Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-31 04:55:25

Wygląda na to, że aplikacja Facebook obsługuje tę intencję nieprawidłowo. Najbardziej niezawodnym sposobem wydaje się korzystanie z API Facebook dla Androida.

SDK jest pod tym linkiem: http://github.com/facebook/facebook-android-sdk

Pod 'usage' jest to:

Wyświetl okno dialogowe Facebook.

SDK obsługuje kilka WebView html okna dialogowe do interakcji z użytkownikami, takie jak tworzenie słupka ściennego. Jest to przeznaczone aby zapewnić szybkie Facebook funkcjonalność bez konieczności zaimplementuj natywny interfejs Androida i prześlij dane do facebook bezpośrednio, choć APIs.

To wydaje się najlepszym sposobem, aby to zrobić -- Wyświetl okno dialogowe, które będzie pisać do ściany. Jedynym problemem jest to, że być może będą musieli się najpierw zalogować

 2
Author: HXCaine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-14 21:02:22
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
Author: Vinod Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-22 21:43:46
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);

}
 1
Author: Ram Bhawan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-07 16:25:44

Facebook to Facebook, który został zgłoszony w kwietniu 2011 roku i nie został jeszcze naprawiony przez deweloperów Facebooka na Androida.

Jedynym obejściem w tej chwili jest użycie ich SDK.

 0
Author: Joseph Woodward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-25 17:39:52

Jeśli chcesz pokazać tekst umieść # na początku wiadomości, którą chcesz, udostępni ją jako Hashtag

 0
Author: MFQ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-24 06:55:07