Teilen Sie Text auf Facebook von der Android App über ACTION_SEND

91

Ich habe eine Android-App und sie unterstützt das Senden von Text über andere Apps. Es verwendet daher die ACTION_SENDAbsicht und das EXTRA_TEXTFeld. Die Auswahl präsentiert mir alle Apps, die mit einer solchen Absicht umgehen können. Das sind Twitter, E-Mail, ... und Facebook. Wenn ich jedoch Facebook auswähle, wird der Browser geöffnet und die folgende Seite aufgerufen:

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

Es zeigt meinen Text und die Schaltfläche "Senden". Aber wenn ich den Submit-Button drücke, passiert nichts. Die Seite wird einfach wieder geladen. Ich denke, vielleicht ist es nur möglich, URLs über die Facebook-App zu senden. Könnte das sein?

Hat es jemand geschafft, Text über ACTION_SENDdie Facebook Android App zu senden ?

Goddchen
quelle
4
Wenn Sie diesen SO-Beitrag besuchen und frustriert sind, dass die Facebook-App ACTION_SEND nicht ordnungsgemäß unterstützt, nehmen Sie sich bitte die Zeit, Ihren Beitrag zum folgenden Thema hinzuzufügen: forum.developers.facebook.net/viewtopic.php?id=93900
Fehler 454
7
Ich vermute 21-3-2012 noch nicht gelöst? Weil ich es nicht zum Laufen bringen kann ..
Diego
1
developer.facebook.com/bugs/332619626816423 - Es sieht so aus, als hätte das Facebook-Designteam dieses geschlossen, da das Vorabfüllen einer Nachricht gegen ihre Richtlinien verstößt :(
Brett
1
@Brett Das ist verdammt lächerlich. Sie möchten nur, dass Sie ihr SDK zu Ihrem Projekt hinzufügen.
Theblang
2
17. Mai 2015 - funktioniert immer noch nicht mit Facebook.
Faisal Asif

Antworten:

11

BEARBEITET: mit der neuen Version der offiziellen Facebook-App für Android (14. Juli 2011) FUNKTIONIERT ES !!!

ALT: Die obigen Beispiele funktionieren nicht, wenn der Benutzer die Facebook-App zum Teilen auswählt, aber sie funktionieren, wenn der Benutzer die Seesmic-App zum Posten auf Facebook auswählt. Ich denke, Seesmic hat eine bessere Implementierung der Facebook-API als Facebook!

Giulio Prisco
quelle
In Facebook Version 1.6.1 funktioniert es nicht und einige zusätzliche Fehler scheinen beim Senden vorhanden zu sein!
saß
Es fing an zu arbeiten! Ich weiß nicht, was das Problem war. Danke, es funktioniert auch mit FB v 1.6.1.
saß
8
Diese Antwort ist falsch seit der Veröffentlichung der Version 1.6.2 der Facebook-App: developer.facebook.com/bugs/363863587019268
alaeri
51

Damit das Teilen mit der Facebook-App funktioniert, muss nur mindestens ein Link vorhanden sein:

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

Dies zeigt das richtige Freigabefenster an, aber wenn Sie auf Freigeben klicken, passiert nichts (ich habe es auch mit der offiziellen Twitter-App versucht, es funktioniert nicht).

Die einzige Möglichkeit, die Freigabe der Facebook-App zum Funktionieren zu bringen, besteht darin, nur einen Link ohne Text freizugeben:

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

Es wird das folgende Fenster angezeigt und die Schaltfläche Teilen funktioniert:

Facebook teilen

Anscheinend werden automatisch ein Bild und ein Text vom Link benötigt, um die Freigabe zu füllen.

Wenn Sie nur Text freigeben möchten, müssen Sie die Facebook-API verwenden: https://github.com/facebook/facebook-android-sdk

ol_v_er
quelle
4
Wo ist der Text "Wunderbare Suchmaschine"? Das ist derselbe Fehler, den die Leute oben gemeldet haben, oder?
Kyle Clegg
3
Er sagt, Sie können nur einen Link posten. Kein Text. Der Text "Wunderbare Suchmaschine" musste herausgenommen werden, damit er funktionierte.
Chubbsondubs
Ich werde +1, wenn Sie die Antwort aktualisieren. Ab sofort Facebookzieht die App den Link korrekt aus einem String wie Wonderful search engine http://www.google.fr/. Beachten Sie, dass ich sagte, ziehen Sie den Link , es wird immer noch nichts mit dem Text tun. Funktioniert auch Twittersowohl mit dem Text als auch mit dem Link.
Theblang
45

06/2013:

  • Dies ist ein Fehler von Facebook, nicht Ihr Code
  • Facebook wird diesen Fehler NICHT beheben . Sie sagen, es sei "beabsichtigt", dass sie das Android-Freigabesystem beschädigt haben: https://developers.facebook.com/bugs/332619626816423
  • Verwenden Sie das SDK oder geben Sie nur die URL frei.
  • Tipps: Sie können ein wenig schummeln, indem Sie den Titel der Webseite als Text für den Beitrag verwenden.
Loda
quelle
28
Vielen Dank Faceobook. </
sarcasm
Vielen Dank an @Loda für die Aufmerksamkeit
Jigar
28

Zuerst müssen Sie die Option Absicht zur Handlerfreigabe abfragen. Verwenden Sie dann den Paketnamen, um Intent zu filtern. Dann haben wir nur eine Intent-Option für die Handlerfreigabe!

Über Facebook teilen

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 - Teilen Sie über 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;
   }
}

Und wenn Sie herausfinden möchten, wie Sie über eine andere Freigabeanwendung teilen können, finden Sie diese dort. Tép Blog - Advance Share über Android

khaintt
quelle
13
Auf diese Weise können Sie immer noch keinen Text (nur Link) in Facebook und Twitter teilen. Sie müssen SDK Facebook (Twitter) für Android verwenden.
Geheimnis
Hallo, ich habe es versucht, aber es wurde nicht die Nachricht angezeigt, dass ich es auf Facebook teilen möchte ... Irgendeine Idee warum? Es fordert mich auf, mich anzumelden und zeigt "Was ist in deinem Kopf?" Hinweis Text nicht der eigentliche Text, den ich teilen möchte
Ramesh Sangili
Das funktioniert nicht. Es zeigt die gleiche leere Eingabe wie bei der normalen (Dialog-) Absicht.
Ixx
3
aber auf Twitter Text sind leicht zu
posten
1
Funktioniert nicht für Facebook und um das Teilen auf Twitter zu ermöglichen, muss die Intent-Komponente nicht festgelegt werden.
Juozas Kontvainis
11

Ich habe also eine Lösung, aber es wird davon ausgegangen, dass Sie die Kontrolle über die Seite haben, die Sie teilen ...

Wenn Sie Ihren EXTRA_TEXT so formatieren ...

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

... dann sollte Ihr Text auf Nicht-Facebook-Apps ungefähr so ​​aussehen:

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

Hey!
Dies ist ein ordentliches Bild!

Wenn Sie nun Ihre Website so aktualisieren, dass Anforderungen mit dem Abfrageparameter extraText den Inhalt von extraText in den Metadaten der Seite zurückgeben.

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

Wenn Facebook diese URL verlässt, um den Dialog zu generieren, liest es die Titel-Metadaten und bettet sie in Ihren Freigabedialog ein.

Mir ist klar, dass dies eine hübsche Yuck-Lösung ist, also nimm ein Körnchen Salz ...

Joseph Lee
quelle
(plus eins) als xkcd-Referenz.
Aamir Abro
2

Es scheint, dass die Facebook-App diese Absicht falsch behandelt. Der zuverlässigste Weg scheint die Verwendung der Facebook-API für Android zu sein.

Das SDK befindet sich unter folgendem Link: http://github.com/facebook/facebook-android-sdk

Unter "Verwendung" gibt es Folgendes:

Zeigen Sie einen Facebook-Dialog an.

Das SDK unterstützt mehrere WebView-HTML-Dialoge für Benutzerinteraktionen, z. B. das Erstellen eines Pinnwandeintrags. Dies soll eine schnelle Facebook-Funktionalität bieten, ohne dass eine native Android-Benutzeroberfläche implementiert und Daten direkt über die APIs an Facebook übergeben werden müssen.

Dies scheint der beste Weg zu sein - zeigen Sie einen Dialog an, der an die Wand gepostet wird. Das einzige Problem ist, dass sie sich möglicherweise zuerst anmelden müssen

HXCaine
quelle
Nun, das ist nicht genau das, wonach ich gefragt habe. Aber trotzdem danke für den Hinweis. Ich müsste einen separaten Menüpunkt für Facebook-Freigabe hinzufügen, damit dies funktioniert ...
Goddchen
Ja, ich habe verstanden, was du meinst und es ist eine Schlampe, aber ich hatte das gleiche Problem mit der Absicht ACTION_SEND in meiner Anwendung und Facebook hat ihre App nicht repariert, daher scheint dies die beste Alternative zu sein
HXCaine
3
Ich habe gerade weiter gesucht und festgestellt, dass es überall im Internet Menschen mit diesem Problem gibt und Facebook überhaupt nicht hilft. 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
quelle
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
quelle
0

Es scheint, dass es sich um einen Fehler in der Facebook-App handelt, der im April 2011 gemeldet wurde und von den Android-Facebook-Entwicklern noch nicht behoben wurde.

Die einzige Möglichkeit, dies zu umgehen, ist die Verwendung des SDK.

Joseph Woodward
quelle
2
Ich denke, sie möchten, dass Sie die Web-App verwenden, um gemeinsam nutzbare Inhalte mit Freunden zu teilen, damit Sie de Ads sehen können ... Ich habe das gleiche Problem und werde die Facebbok-Freigabe über die Facebook-API implementieren.
Igor
0

Wenn Sie Text anzeigen möchten, setzen Sie # am Anfang der gewünschten Nachricht und teilen Sie diese als Hashtag

MFQ
quelle