Поділіться текстом на Facebook із додатка Android через ACTION_SEND


91

У мене є програма для Android, і вона підтримує надсилання тексту через інші програми. Тому він використовує ACTION_SENDнамір іEXTRA_TEXT поле. Вибірник представляє мені всі програми, які можуть впоратися з таким наміром. Це Twitter, Email, ... та Facebook. Але коли я вибираю Facebook, він відкриває браузер і переходить на наступну сторінку:

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

На ньому відображається мій текст і кнопка надсилання. Але коли я натискаю кнопку подати, нічого не відбувається. Сторінка просто завантажується знову. Думаю, можливо, надсилати URL-адреси можна лише через додаток Facebook. Чи може це бути?

Чи вдалося комусь надіслати текст ACTION_SENDчерез програму Facebook для Android?


4
Якщо ви завітаєте до цієї публікації SO та розчаровані тим, що програма facebook не підтримує належним чином ACTION_SEND, знайдіть час, щоб додати свою публікацію до такої теми: forum.developers.facebook.net/viewtopic.php?id=93900
Помилка 454,

7
Я думаю, 21-3-2012 все ще не вирішено? Тому що я не можу змусити його працювати ...
Дієго,

1
developers.facebook.com/bugs/332619626816423 - Схоже, команда дизайнерів facebook закрила це, оскільки попереднє заповнення повідомлення суперечить їхній політиці :(
Бретт,

1
@Brett Це дивно смішно. Вони просто хочуть змусити вас додати свій SDK до свого проекту.
theblang 03.03.14

2
17 травня 2015 р. - все ще не працює з facebook.
Фейсал Асіф

Відповіді:


11

ВИДАЛЕНО: з новим випуском офіційного додатка Facebook для Android (14 липня 2011 р.) РОБОТИ !!!

СТАРИЙ: Наведені вище приклади не працюють, якщо користувач вибирає програму Facebook для обміну, але вони працюють, якщо користувач вибирає програму Seesmic для публікації на Facebook. Я думаю, Seesmic має кращу реалізацію API Facebook, ніж Facebook!


У версії Facebook 1.6.1 він не працює, і деякі додаткові помилки, здається, є під час надсилання!
сів

Це почало працювати! Не знаю, в чому була проблема. Дякую, це працює і з FB v 1.6.1.
сб

8
Ця відповідь помилкова з моменту випуску версії 1.6.2 програми facebook: developers.facebook.com/bugs/363863587019268
alaeri

51

Щоб спільний доступ працював із програмою 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"));

Це покаже правильне вікно спільного доступу, але коли ви натискаєте на спільний доступ, нічого не відбувається (я також спробував з офіційним додатком 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 частка

Очевидно, для заповнення спільного доступу автоматично знімається зображення та текст із посилання.

Якщо ви хочете поділитися лише текстом, вам доведеться використовувати facebook api: https://github.com/facebook/facebook-android-sdk


4
Де текст "Чудова пошукова машина"? Це та сама помилка, про яку люди повідомляють вище, так?
Kyle Clegg

3
Він каже, що ви можете розміщувати лише посилання. Без тексту. Текст "Чудової пошукової машини" потрібно було вийняти, щоб він запрацював.
chubbsondubs

Я оціню +1, якщо ви оновите відповідь. На даний момент Facebookдодаток буде правильно витягувати посилання із рядка типу Wonderful search engine http://www.google.fr/. Зверніть увагу, що я сказав, що витягуємо посилання , воно все одно нічого не буде робити з текстом. Крім того, Twitterпрацює як з текстом, так і з посиланням.
theblang

45

06/2013:

  • Це помилка Facebook, а не ваш код
  • Facebook НЕ виправить цю помилку , вони кажуть, що саме "за задумом" вони зламали систему спільного використання Android: https://developers.facebook.com/bugs/332619626816423
  • використовувати SDK або ділитися лише URL-адресою.
  • Поради: ви можете трохи обдурити, використовуючи заголовок веб-сторінки як текст для публікації.

28
Велике спасибі Faceobook. </sarcasm>
mr_lou

Дякую @Loda за те, що привернули нашу увагу
Джигар

28

Спочатку вам потрібен варіант наміру до опції обміну обробником. Тоді використовуйте ім’я пакета для фільтрації наміру, тоді ми матимемо лише один намір, який має можливість обміну обробником!

Поділитися через 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 - Попередній доступ через Android


13
Використовуючи способи, якими ви все ще не можете ділитися текстом (просто посиланням) у Facebook та Twitter. Ви повинні використовувати SDK Facebook (Twitter) для Android.
secretlm

Привіт, я спробував це, але воно не відображало повідомлення про те, що я хочу поділитися ним на facebook ... Будь-яка ідея, чому? Він просить мене увійти і показує: "Що у вас на думці?" текст підказки не той текст, яким я хочу поділитися
Рамеш Санджілі

Це не працює. Він показує той самий порожній вхід, що і при звичайному (діалоговому) задумі.
Ixx

3
але в твіттері текст легко розміщувати
Трікалдарші

1
Не працює для Facebook, і щоб увімкнути спільний доступ у Twitter, немає необхідності встановлювати компонент intent.
Juozas Kontvainis

11

Отже, я маю роботу, але передбачаю, що ви маєте контроль над сторінкою, якою ви ділитесь ...

Якщо ви форматуєте 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-адреси, щоб сформувати діалогове вікно, він прочитає метадані заголовка та вбудує їх у ваше діалогове вікно спільного доступу.

Я усвідомлюю, що це гарне рішення, так що візьміть із зерном солі ...


(плюс один) для посилання на xkcd.
Aamir Abro

2

Схоже, що програма Facebook обробляє цей намір неправильно. Здається, найнадійнішим способом є використання API Facebook для Android.

SDK знаходиться за цим посиланням: http://github.com/facebook/facebook-android-sdk

У розділі "використання" є таке:

Відображення діалогового вікна Facebook.

SDK підтримує кілька діалогових вікон WebView html для взаємодії користувачів, наприклад, створення повідомлення на стіні. Це призначено для забезпечення швидкої функціональності Facebook без необхідності впроваджувати власний інтерфейс Android та передавати дані на facebook безпосередньо через API.

Це здається найкращим способом зробити це - відобразити діалогове вікно, яке буде розміщено на стіні. Проблема лише в тому, що їм, можливо, доведеться ввійти спочатку


Ну це не зовсім те, про що я просив. Але все одно дякую за підказку. Мені потрібно було б додати окремий пункт меню для спільного доступу до facebook, щоб це працювало ...
Goddchen

Так, я зрозумів, що ви мали на увазі, і це сука, але у мене була така сама проблема з наміром ACTION_SEND у моїй програмі, і Facebook не виправив їх, тому це, здається, найкраща альтернатива
HXCaine

3
Щойно я ще трохи розшукав і виявив, що в Інтернеті є люди з цією проблемою, і Facebook взагалі не допомагає. 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

Схоже, це помилка в додатку Facebook, про яку повідомлялося в квітні 2011 року, і розробники Android Facebook ще її не виправили.

На даний момент єдиною роботою є використання їх SDK.


2
Я думаю, вони хочуть, щоб ти використовував веб-додаток, щоб ділитися вмістом, яким можна поділитися з друзями, щоб ти міг бачити рекламу ... У мене така ж проблема, і я запроваджу обмін Facebbok через facebook api.
Ігор

0

якщо ви хочете показати текст, покладений # на початковому етапі повідомлення, яке ви хочете, воно поділиться ним як хештег

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.