表題の通り、めっちゃハマったので、記録しておく。
要件
flutterからTwitterにシェアするとき、アプリをインストールしていればアプリへ、そうでなければwebへ。
シェアする内容はtext, url, hashtags
事前準備
- iOSの設定: info.plistにschemeを登録
<key>LSApplicationQueriesSchemes</key>
<array>
...
<string>twitter</string>
</array>
- Androidの設定:sdk30以降必要。
AndroidManifest.xml
に以下を追加(他のschemeへ飛べるための設定)
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="*/*" />
</intent>
シェアする時
twitter://post
する時、url
とhashtags
は認識されないので、text
にそのまま追加
final tweetQuery = <String, dynamic>{
'text': 'myText',
'url': 'https://...',
'hashtags': ['tag1', 'tag2'],
};
final text = 'myText'
' #tag1 #tag2'
' ${https://...}';
final tweetScheme = Uri(
scheme: 'twitter',
host: 'post',
queryParameters: <String, String>{'text': text},
);
final tweetIntentUrl =
Uri.https('twitter.com', '/intent/tweet', tweetQuery);
await canLaunchUrl(tweetScheme)
? await launchUrl(tweetScheme)
: await launchUrl(tweetIntentUrl);