Condividi testo su Facebook dall'app Android tramite ACTION_SEND


91

Ho un'app Android e supporta l'invio di testo tramite altre app. Utilizza quindi l' ACTION_SENDintento e il EXTRA_TEXTcampo. Il selezionatore mi presenta tutte le app in grado di gestire un tale intento. Quelli sono Twitter, Email, ... e Facebook. Ma quando seleziono Facebook, apre il browser e va alla pagina seguente:

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

Mostra il mio testo e il pulsante di invio. Ma quando premo il pulsante di invio non succede nulla. La pagina viene caricata di nuovo. Penso che forse sia possibile inviare URL solo tramite l'app di Facebook. Potrebbe essere?

Qualcuno è riuscito a inviare messaggi tramite ACTION_SENDl'app Facebook per Android?


4
Se visiti questo post SO e sei frustrato dal fatto che l'app Facebook non supporti correttamente ACTION_SEND, dedica del tempo ad aggiungere il tuo post al seguente argomento: forum.developers.facebook.net/viewtopic.php?id=93900
Errore 454

7
Immagino che il 21-3-2012 non sia ancora risolto? Perché non riesco a farlo funzionare ..
Diego

1
Developers.facebook.com/bugs/332619626816423 - Sembra che il team di progettazione di Facebook abbia chiuso questo perché pre-compilare un messaggio è contro la loro politica :(
Brett

1
@Brett Questo è assolutamente ridicolo. Vogliono solo farti aggiungere il loro SDK al tuo progetto.
theblang

2
17 maggio 2015 - ancora non funziona con Facebook.
Faisal Asif

Risposte:


11

MODIFICATO: con la nuova versione dell'app ufficiale di Facebook per Android (14 luglio 2011) FUNZIONA !!!

VECCHIO: Gli esempi sopra non funzionano se l'utente sceglie l'app Facebook per la condivisione, ma funzionano se l'utente sceglie l'app Seesmic per pubblicare su Facebook. Immagino che Seesmic abbia un'implementazione migliore dell'API di Facebook rispetto a Facebook!


Nella versione 1.6.1 di Facebook non funziona e sembra che ci siano alcuni bug aggiuntivi durante l'invio!
sabato

Ha iniziato a funzionare! Non so quale fosse il problema. Grazie funziona anche con FB v 1.6.1.
sabato

8
Questa risposta è sbagliata dal rilascio della versione 1.6.2 dell'app facebook: developers.facebook.com/bugs/363863587019268
alaeri

51

Per fare in modo che la condivisione funzioni con l'app Facebook, è sufficiente disporre di almeno un collegamento:

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

Questo mostrerà la finestra di condivisione corretta ma quando fai clic su condividi non succede nulla (ho provato anche con l'app Twitter ufficiale, non funziona).

L'unico modo che ho trovato per far funzionare la condivisione dell'app di Facebook è condividere solo un collegamento senza testo:

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

Mostrerà la seguente finestra e il pulsante Condividi funzionerà:

condivisione su facebook

Apparentemente prende automaticamente un'immagine e un testo dal collegamento per popolare la condivisione.

Se vuoi condividere solo testo, dovrai utilizzare l'API di Facebook: https://github.com/facebook/facebook-android-sdk


4
Dov'è il testo "Motore di ricerca meraviglioso"? È lo stesso bug che le persone segnalano sopra, vero?
Kyle Clegg

3
Sta dicendo che puoi solo pubblicare un link. Nessun testo. Il testo "Meraviglioso motore di ricerca" doveva essere rimosso per funzionare.
chubbsondubs

Faccio +1 se aggiorni la risposta. A partire da ora l' Facebookapp estrarrà correttamente il collegamento da una stringa come Wonderful search engine http://www.google.fr/. Nota che ho detto di tirare il link , ancora non farà nulla con il testo. Inoltre, Twitterfunziona sia con il testo che con il collegamento.
theblang

45

06/2013:

  • Questo è un bug di Facebook, non il tuo codice
  • Facebook NON risolverà questo bug , dicono che è "by design" che hanno rotto il sistema di condivisione di Android: https://developers.facebook.com/bugs/332619626816423
  • utilizzare l'SDK o condividere solo l'URL.
  • Suggerimenti: potresti imbrogliare un po 'usando il titolo della pagina web come testo per il post.

28
Grazie mille Faceobook. </
sarcasm

Grazie @Loda per aver attirato la nostra attenzione
Jigar

28

Per prima cosa hai bisogno dell'opzione di condivisione Intent to handler. Quindi usa il nome del pacchetto per filtrare l'Intent, quindi avremo solo un Intent che l'opzione di condivisione del gestore!

Condividi tramite 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: condividi tramite 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;
   }
}

E se vuoi scoprire come condividere tramite un'altra applicazione di condivisione, trovaloTép Blog - Condivisione anticipata tramite Android


13
Usando i modi in cui non puoi ancora condividere il testo (solo link) su Facebook e Twitter. È necessario utilizzare l'SDK Facebook (Twitter) per Android.
secretlm

Ciao, ho provato questo, ma non mostra il messaggio che voglio condividerlo su Facebook ... Qualche idea del perché? Mi chiede di accedere e mostra "Che cosa hai in mente?" testo suggerimento non il testo effettivo che voglio condividerlo
Ramesh Sangili

Questo non funziona. Mostra lo stesso input vuoto del normale intento (dialogo).
Ixx

3
ma su Twitter il testo è facilmente pubblicato
Trikaldarshi

1
Non funziona per Facebook e per abilitare la condivisione su Twitter non è necessario impostare la componente intent.
Juozas Kontvainis

11

Quindi ho una soluzione, ma presume che tu abbia il controllo sulla pagina che stai condividendo ...

Se formatti EXTRA_TEXT in questo modo ...

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

... quindi su app non Facebook, il tuo testo dovrebbe apparire in questo modo:

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

Hey!
Questa è una bella foto!

Ora, se aggiorni il tuo sito web in modo tale che le richieste con il parametro di query extraText restituiscano il contenuto di extraText nei metadati della pagina.

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

Quindi, quando Facebook sfugge a quell'URL per generare la finestra di dialogo, leggerà i metadati del titolo e li incorporerà nella finestra di dialogo di condivisione.

Mi rendo conto che questa è una soluzione piuttosto schifo, quindi prendi con le pinze ...


(più uno) per riferimento xkcd.
Aamir Abro

2

Sembra che l'app di Facebook gestisca questo intento in modo errato. Il modo più affidabile sembra essere quello di utilizzare l'API di Facebook per Android.

L'SDK si trova a questo collegamento: http://github.com/facebook/facebook-android-sdk

Sotto 'utilizzo', c'è questo:

Visualizza una finestra di dialogo di Facebook.

L'SDK supporta diverse finestre di dialogo html di WebView per le interazioni dell'utente, come la creazione di un bacheca. Questo ha lo scopo di fornire una rapida funzionalità di Facebook senza dover implementare un'interfaccia utente Android nativa e passare i dati a Facebook direttamente tramite le API.

Questo sembra il modo migliore per farlo: visualizza una finestra di dialogo che verrà pubblicata sul muro. L'unico problema è che potrebbero dover accedere prima


Beh, non è esattamente quello che stavo chiedendo. Ma comunque grazie per il suggerimento. Avrei bisogno di aggiungere una voce di menu separata per la condivisione di Facebook per far funzionare questo ...
Goddchen

Sì, ho capito cosa intendevi ed è una cagna, ma ho avuto lo stesso problema con l'intento ACTION_SEND nella mia applicazione e Facebook non ha corretto la loro app, quindi questa sembra essere la migliore alternativa
HXCaine

3
Ho appena fatto altre ricerche e ho scoperto che ci sono persone in tutto Internet con questo problema e Facebook non sta aiutando affatto. 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

Sembra che si tratti di un bug nell'app di Facebook che è stato segnalato nell'aprile 2011 e deve ancora essere risolto dagli sviluppatori di Facebook di Android.

L'unica soluzione per il momento è utilizzare il loro SDK.


2
Penso che vogliano che tu usi l'app web per condividere contenuti condivisibili con gli amici, così puoi vedere de Ads ... Ho lo stesso problema e implementerò la condivisione Facebbok tramite l'API di Facebook.
Igor

0

se vuoi mostrare il testo metti # all'inizio del messaggio che desideri, lo condividerà come hashtag

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.