Поделиться текстом на Facebook из приложения Android через ACTION_SEND
У меня есть приложение для Android, и оно поддерживает отправку текста через другие приложения. Поэтому он использует намерение ACTION_SEND
и поле EXTRA_TEXT
. Выбор предоставляет мне все приложения, которые могут справиться с таким намерением. Это Twitter, электронная почта,... и Facebook. Но когда я выбираю Facebook, он открывает браузер и переходит на следующую страницу:
http://m.facebook.com/sharer.php?u=mytext
Он показывает мой текст и кнопку отправки. Но когда я нажимаю кнопку отправки ничего не происходит. Страница просто снова загружается.
Я думаю, что возможно отправлять URL-адреса можно только через приложение Facebook. Может ли это быть?
Кому-нибудь удалось отправить текст через ACTION_SEND
через приложение Facebook Android?
Ответы
Ответ 1
EDITED: с новым выпуском официального приложения Facebook для Android (14 июля 2011 г.) ИТ-РАБОТЫ!!!
OLD: приведенные выше примеры не работают, если пользователь выбирает приложение Facebook для совместного использования, но они работают, если пользователь выбирает приложение Seesmic для публикации в Facebook. Я предполагаю, что Seesmic лучше реализует API Facebook, чем Facebook!
Ответ 2
Чтобы заставить Share работать с приложением facebook, вам нужно только иметь по крайней мере одну ссылку:
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"));
Это покажет правильное окно совместного доступа, но когда вы нажимаете на share, ничего не происходит (я также пытался использовать официальное приложение Twitter, оно не работает).
Единственный способ, с помощью которого я нашел работу с подключением к Facebook, - это предоставить только ссылку без текста:
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"));
Появится следующее окно, и кнопка "Поделиться" будет работать:
![facebook share]()
По-видимому, он автоматически принимает изображение и текст из ссылки, чтобы заполнить общий ресурс.
Если вы хотите поделиться только текстом, вам нужно будет использовать facebook api: https://github.com/facebook/facebook-android-sdk
Ответ 3
06/2013:
- Это ошибка от Facebook, а не от вашего кода.
- Facebook НЕ исправит эту ошибку, они говорят , что "по дизайну" они нарушили общую систему Android: https://developers.facebook.com/bugs/332619626816423
- используйте SDK или используйте только общий URL.
- Советы: вы можете немного обмануть, используя название веб-страницы в качестве текста для сообщения.
Ответ 4
Сначала вам нужен запрос Intent to handler sharing. Затем используйте имя пакета для фильтрации Intent, тогда у нас будет только один Intent, который будет использоваться для обмена обработчиком!
Поделиться через 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;
}
}
Бонус - Поделиться через 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;
}
}
И если вы хотите найти, как делиться через другое приложение для совместного использования, найдите его там Блог Tép - доля предварительного доступа через Android
Ответ 5
Итак, у меня есть работа, но предполагается, что у вас есть контроль над страницей, которую вы делите...
Если вы форматируете EXTRA_TEXT так...
String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;
... затем в приложениях, отличных от Facebook, ваш текст должен выглядеть примерно так:
http://www.example.com/myPicPage.html?extraText=
Эй!
Это аккуратный рисунок!
Теперь, если вы обновите свой сайт таким образом, чтобы запросы с параметром запроса extraText возвращали содержимое extraText в метаданные страницы.
<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ -->
<meta name="title" content="Hey! this is a neat pic!">
Затем, когда Facebook ускользает от этого URL-адреса, чтобы сгенерировать диалог, он будет читать метаданные заголовка и вставлять его в диалог общего доступа.
Я понимаю, что это довольно yuck-решение, поэтому возьмите с солью...
Ответ 6
Похоже, что приложение Facebook неправильно обрабатывает это намерение. Самый надежный способ - использовать API Facebook для Android.
SDK по этой ссылке: http://github.com/facebook/facebook-android-sdk
В разделе "Использование" есть следующее:
Показать диалог в Facebook.
SDK поддерживает несколько WebView html диалоговые окна для взаимодействия с пользователем, например создавая стену. Это предназначено предоставить быстрый Facebook функциональности без необходимости реализовать собственный пользовательский интерфейс Android и пройти данных непосредственно в facebook, хотя API-интерфейсы.
Это похоже на лучший способ сделать это - отобразить диалог, который будет размещаться на стене. Единственная проблема заключается в том, что они могут сначала войти в систему
Ответ 7
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
Ответ 8
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);
}
Ответ 9
Похоже, что это ошибка в приложении Facebook, о котором сообщалось в апреле 2011 года и еще не зафиксирована разработчиками Android Facebook.
Единственная работа на данный момент - использовать их SDK.
Ответ 10
если вы хотите показать текст, поместив # при попрошайничестве сообщения, которое вы хотите, чтобы он разделил его как Hashtag