Доля текста на Facebook из Android-приложения через действие отправить
У меня есть приложение для Android, и он поддерживает отправку текста через другие приложения. Поэтому он использует намерение ACTION_SEND и поле EXTRA_TEXT. Выбор представляет мне все приложения, которые могут справиться с таким намерением. Это Twitter, электронная почта, ... и Facebook. Но когда я выбираю Facebook он открывает браузер и переходит на следующую страницу:
http://m.facebook.com/sharer.php?u=mytext
Он показывает мой текст и кнопку отправки. Но когда я нажимаю кнопка Отправить ничего не происходит. Страница просто загружается снова.
Я думаю, что, возможно, это возможно только для отправки URL-адресов через приложение Facebook. Может ли это быть?
кому-нибудь удалось отправить текст через ACTION_SEND через приложение Facebook Android?
10 ответов:
отредактировано: с новым выпуском официального приложения Facebook для Android (14 июля 2011 года) ЭТО РАБОТАЕТ!!!
старый: приведенные выше примеры не работают, если пользователь выбирает приложение Facebook для обмена, но они работают, если пользователь выбирает приложение Seesmic для публикации на Facebook. Я думаю, что Seesmic имеет лучшую реализацию API Facebook, чем Facebook!
чтобы сделать долю работать с приложением facebook, вам нужно только иметь suply по крайней мере одну ссылку:
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 App sharing-это поделиться только ссылкой без текста:
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"));он покажет следующее окно и кнопка Share будет работа:
по-видимому, он автоматически принимает изображение и текст из ссылки для заполнения общего ресурса.
Если вы хотите поделиться только текстом, вам придется использовать Facebook api:https://github.com/facebook/facebook-android-sdk
06/2013:
- это ошибка из Facebook, а не ваш код
- Facebook не исправит эту ошибку говорят это "по замыслу" что они сломали Android share system:https://developers.facebook.com/bugs/332619626816423
- используйте SDK или только URL-адрес общего доступа.
- советы: вы можете немного обмануть, используя название веб-страницы в качестве текста для сообщения.
сначала вам нужно намерение запроса к опции совместного использования обработчика. Затем используйте имя пакета для фильтрации намерения, тогда у нас будет только одно намерение, что опция совместного использования обработчика!
поделиться через 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 Blog-Advance share через Android
Итак, у меня есть работа, но она предполагает, что у вас есть контроль над страницей, которую вы делите...
Если вы форматируете свой 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-адрес для создания диалогового окна, он будет читать метаданные заголовка и вставлять их в диалог общего доступа.
Я понимаю, что это довольно гадкое решение, поэтому возьмите с солью...
похоже, что приложение Facebook обрабатывает это намерение неправильно. Наиболее надежным способом, по-видимому, является использование API Facebook для Android.
SDK находится по этой ссылке:http://github.com/facebook/facebook-android-sdk
В разделе "использование", есть это:
отображение диалогового окна Facebook.
SDK поддерживает несколько WebView html диалоговые окна для взаимодействия с пользователем, такие как создание столба стены. Это предназначено чтобы обеспечить быстрый Facebook функциональность без необходимости реализовать собственный интерфейс Android и пройти данные в facebook непосредственно Апис.
Это кажется лучшим способом сделать это-отобразить диалоговое окно, которое будет опубликовано на стене. Единственная проблема заключается в том, что они могут войти в первую очередь
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
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); }
похоже, что это ошибка в приложении Facebook, которая была сообщена в апреле 2011 года и до сих пор еще не исправлена разработчиками Android Facebook.
единственная работа вокруг на данный момент, чтобы использовать их SDK.
Если вы хотите показать текст # при попрошайничестве сообщения, которое вы хотите, он будет делиться им как хэштегом

Comments