Compartilhe texto no Facebook do aplicativo Android via ACTION_SEND

91

Tenho um aplicativo Android e ele suporta o envio de texto por meio de outros aplicativos. Portanto, ele usa a ACTION_SENDintenção e o EXTRA_TEXTcampo. O seletor me apresenta todos os aplicativos que podem lidar com essa intenção. Esses são Twitter, e-mail, ... e Facebook. Mas quando seleciono o Facebook, ele abre o navegador e vai para a seguinte página:

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

Ele mostra meu texto e o botão enviar. Mas quando pressiono o botão enviar nada acontece. A página simplesmente carrega novamente. Acho que só é possível enviar URLs através do aplicativo do Facebook. Pode ser isso?

Alguém conseguiu enviar texto ACTION_SENDpelo aplicativo do Facebook para Android?

Goddchen
fonte
4
Se você visitar esta postagem do SO e estiver frustrado porque o aplicativo do Facebook não oferece suporte adequado para ACTION_SEND, reserve um tempo para adicionar sua postagem ao seguinte tópico: forum.developers.facebook.net/viewtopic.php?id=93900
Erro 454
7
Suponho que 21-3-2012 ainda não está resolvido? Porque não consigo fazer funcionar ..
Diego
1
developers.facebook.com/bugs/332619626816423 - Parece que a equipe de design do Facebook fechou este aqui, pois o pré-preenchimento de uma mensagem é contra sua política :(
Brett
1
@Brett Isso é ridículo. Eles apenas querem que você adicione o SDK deles ao seu projeto.
theblang
2
17 de maio de 2015 - ainda não funciona com o Facebook.
Faisal Asif de

Respostas:

11

EDITADO: com o novo lançamento do aplicativo oficial do Facebook para Android (14 de julho de 2011) FUNCIONA !!!

ANTIGO: Os exemplos acima não funcionam se o usuário escolher o aplicativo do Facebook para compartilhamento, mas funcionam se o usuário escolher o aplicativo Seesmic para postar no Facebook. Eu acho que o Seesmic tem uma implementação melhor da API do Facebook do que o Facebook!

Giulio Prisco
fonte
Na versão 1.6.1 do Facebook não está funcionando e alguns bugs adicionais parecem estar lá durante o envio!
sábado
Começou a funcionar! Não sei qual era o problema. Obrigado, ele funciona com o FB v 1.6.1 também.
sábado
8
Esta resposta está errada desde o lançamento da versão 1.6.2 do aplicativo do Facebook: developers.facebook.com/bugs/363863587019268
alaeri
51

Para que o Share funcione com o aplicativo do Facebook, você só precisa fornecer pelo menos um 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"));

Isso irá mostrar a janela de compartilhamento correta, mas quando você clica em compartilhar, nada acontece (eu também tentei com o aplicativo oficial do Twitter, não funciona).

A única maneira que encontrei de fazer o compartilhamento de aplicativo do Facebook funcionar é compartilhar apenas um link sem texto:

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

Ele mostrará a seguinte janela e o botão Compartilhar funcionará:

compartilhamento do Facebook

Aparentemente, ele pega automaticamente uma imagem e um texto do link para preencher o compartilhamento.

Se você quiser compartilhar apenas texto, você terá que usar a API do Facebook: https://github.com/facebook/facebook-android-sdk

ol_v_er
fonte
4
Onde está o texto "Motor de pesquisa maravilhoso"? Esse é o mesmo bug que as pessoas estão relatando acima, certo?
Kyle Clegg
3
Ele está dizendo que você só pode postar um link. Nenhum texto. O texto "Wonderful search engine" teve de ser retirado para que funcionasse.
chubbsondubs
Vou marcar com +1 se você atualizar a resposta. A partir de agora, o Facebookaplicativo irá puxar corretamente o link de uma string como Wonderful search engine http://www.google.fr/. Observe que eu disse puxar o link , mesmo assim não fará nada com o texto. Além disso, Twitterfunciona com o texto e o link.
theblang
45

06/2013:

  • Este é um bug do Facebook, não o seu código
  • O Facebook NÃO corrigirá esse bug , eles dizem que foi "intencionalmente" que quebraram o sistema de compartilhamento do Android: https://developers.facebook.com/bugs/332619626816423
  • use o SDK ou compartilhe apenas URL.
  • Dicas: você pode trapacear um pouco usando o título da página da web como texto do post.
Loda
fonte
28
Muito obrigado Faceobook. </sarcasm>
mr_lou
Obrigado @Loda por chamar nossa atenção
Jigar
28

Primeiro, você precisa da intenção de consulta para a opção de compartilhamento do manipulador. Em seguida, use o nome do pacote para filtrar o Intent, então teremos apenas uma opção de compartilhamento do Intent para esse manipulador!

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

Bônus - Compartilhe via 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 você quiser saber como compartilhar através de outro aplicativo de compartilhamento, encontre lá Tép Blog - Compartilhamento avançado via Android

khaintt
fonte
13
Usando as maneiras que você ainda não consegue compartilhar texto (apenas link) no Facebook e Twitter. Você deve usar o SDK do Facebook (Twitter) para Android.
secretlm
Olá, tentei fazer isso, mas não mostra a mensagem que eu quero compartilhar no facebook ... Alguma ideia do porquê? Ele me pede para fazer o login e mostra "O que está em sua mente?" o texto da dica não é o texto real que desejo compartilhar
Ramesh Sangili
Isso não funciona. Mostra a mesma entrada vazia que a intenção normal (diálogo).
Ixx
3
mas no Twitter o texto é facilmente postado
Trikaldarshi
1
Não funciona para o Facebook e, para habilitar o compartilhamento no Twitter, não há necessidade de definir o componente de intenção.
Juozas Kontvainis
11

Então, eu tenho uma solução, mas presume que você tem controle sobre a página que está compartilhando ...

Se você formatar seu EXTRA_TEXT assim ...

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

... então, em aplicativos que não sejam do Facebook, seu texto deve aparecer mais ou menos assim:

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

Ei!
Esta é uma foto legal!

Agora, se você atualizar seu site de forma que as solicitações com o parâmetro de consulta extraText retornem o conteúdo de extraText nos metadados da página.

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

Então, quando o Facebook escapar desse url para gerar a caixa de diálogo, ele lerá os metadados do título e os incorporará à sua caixa de diálogo de compartilhamento.

Sei que essa é uma solução muito nojenta, então pegue com um grão de sal ...

Joseph Lee
fonte
(mais um) para referência xkcd.
Aamir Abro
2

Parece que o aplicativo do Facebook lida com essa intenção incorretamente. A maneira mais confiável parece ser usar a API do Facebook para Android.

O SDK está neste link: http://github.com/facebook/facebook-android-sdk

Em 'uso', há isto:

Exibir uma caixa de diálogo do Facebook.

O SDK oferece suporte a vários diálogos HTML do WebView para interações do usuário, como a criação de uma postagem na parede. O objetivo é fornecer funcionalidade rápida do Facebook sem a necessidade de implementar uma IU nativa do Android e passar dados para o Facebook diretamente por meio das APIs.

Esta parece ser a melhor maneira de fazer isso - exibir uma caixa de diálogo que será postada na parede. O único problema é que eles podem ter que fazer login primeiro

HXCaine
fonte
Bem, não era exatamente isso que eu estava pedindo. Mas de qualquer maneira, obrigado pela dica. Eu precisaria adicionar um item de menu separado para compartilhamento no Facebook para fazer este trabalho ...
Goddchen
Sim, eu entendi o que você quis dizer e é uma merda, mas eu tive o mesmo problema com a intenção ACTION_SEND em meu aplicativo e o Facebook não corrigiu seu aplicativo, então esta parece ser a melhor alternativa
HXCaine
3
Acabei de fazer mais pesquisas e descobri que existem pessoas em toda a Internet com esse problema e o Facebook não está ajudando em nada. 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
fonte
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
fonte
0

Parece que é um bug no aplicativo do Facebook que foi relatado em abril de 2011 e ainda não foi corrigido pelos desenvolvedores Android do Facebook.

A única solução no momento é usar seu SDK.

Joseph Woodward
fonte
2
Acho que eles querem que você use o aplicativo da web para compartilhar conteúdo compartilhável com amigos, para que você possa ver os anúncios ... Estou com o mesmo problema e irei implementar o compartilhamento do Facebbok através da API do Facebook.
Igor
0

se você quiser mostrar o texto coloque # no início da mensagem que você deseja que ele compartilhe como Hashtag

MFQ
fonte