Флаттер открыть WhatsApp с текстовым сообщением - PullRequest
1 голос
/ 31 марта 2020

Я хочу открыть WhatsApp из моего приложения Flutter и отправить указанную c текстовую строку. Я выберу, кому я отправлю его, когда буду в WhatsApp.

После некоторых исследований я придумал следующее:

_launchWhatsapp() async {
const url = "https://wa.me/?text=Hey buddy, try this super cool new app!";
if (await canLaunch(url)) {
  await launch(url);
} else {
  throw 'Could not launch $url';
}

}

Что работает Хорошо, я sh, однако есть две проблемы:

  1. Как только я превращаю текстовую строку в несколько слов, она перестает работать. Поэтому, если я изменю его на:

    _launchWhatsapp () asyn c {const url = "https://wa.me/?text=Hey приятель, попробуйте это супер классное новое приложение!"; if (ожидание canLaunch (url)) {ожидание запуска (url); } else {throw 'Не удалось запустить $ url'; }}

Тогда не удалось запустить $ url.

У меня уже установлен WhatsApp на моем телефоне, но он не go напрямую в приложение, вместо этого он сначала дает мне веб-страницу и возможность открыть приложение.

Здесь это веб-страница, которую я вижу:

enter image description here

Любая помощь в решении любой из этих проблем будет принята с благодарностью.

Спасибо

Carson

PS. Для этого я использую пакет Url_launcher.

1 Ответ

2 голосов
/ 31 марта 2020

Из официального FAQ по WhatsApp вы можете увидеть, что использование «Универсальных ссылок - это предпочтительный способ привязки к учетной записи WhatsApp».

Так что в вашем коде строка URL должна быть:

const url = "https://wa.me/?text=YourTextHere";

Если у пользователя установлен Whatsapp в его телефоне, эта ссылка откроет его напрямую. Это должно решить проблему открытия веб-страницы в первую очередь.

Из-за проблемы невозможности отправки многословных сообщений это связано с тем, что вам необходимо закодировать ваше сообщение как URL. Это также указано в документации:

URL-кодированный текст - это предварительно заполненное URL-кодированное сообщение.

Итак, для URL-кодирования вашего сообщения в Dart Вы можете сделать это следующим образом:

const url = "https://wa.me/?text=Your Message here";
var encoded = Uri.encodeFull(url);

Как видно из экскурсии по языку Dart .

Обратите внимание, что в вашем примере кода вы добавили дополнительный набор одинарных кавычек вокруг текстового сообщения, чего не следует делать.

Редактировать:

Другой вариант, также представленный в FAQ WhatsApp, - это непосредственное использование схемы WhatsApp. Если вы хотите попробовать это, вы можете использовать следующий URL:

const url = "whatsapp://send?text=Hello World!"

Обратите внимание, что если вы тестируете на iOS9 или выше, Документация Apple заявляет:

Важно

Если ваше приложение связано с или после iOS 9.0, вы должны объявить схемы URL, которые вы передаете этому методу, добавив ключ LSApplicationQueriesSchemes в файл Info.plist вашего приложения. Этот метод всегда возвращает false для необъявленных схем, независимо от того, установлено ли соответствующее приложение. Чтобы узнать больше о ключе, см. LSApplicationQueriesSchemes.

Поэтому вам нужно добавить следующие ключи в ваш info.plist, если вы используете пользовательскую схему WhatsApp:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>whatsapp</string>
</array>
...