5

I have used Url_launcher package;I want to open Facebook link in facebook app if app installed else the browser.This nicely works in Android but in IOS it only open the Facebook app not the link.

The code is :

String digital_url= "https://facebook.com/AliForDigitalIsrael/";

    new ListTile(
                            leading: new SvgPicture.asset(
                              'assets/images/ic_menu_fb.svg',
                              height: 24.0,
                              width: 24.0,
                              color: Colors.black54,
                            ),
                            title: new Text(
                              Strings.fbdigital,
                              textDirection: TextDirection.rtl,
                            ),
                            onTap: () async {
                              var fbUrl =
                                  "fb://facewebmodal/f?href=" + Strings.digital_url;
                              launchFacebook(fbUrl, Strings.digital_url);
                              hideDrawer();
                            },
    
                          ),
         Future<void> launchFacebook(String fbUrl,String fbWebUrl)
      async {
        try {
          bool launched = await launch(fbUrl, forceSafariVC: false);
          print("Launched Native app $launched");
    
          if (!launched) {
            await launch(fbWebUrl, forceSafariVC: false);
            print("Launched browser $launched");
          }
        } catch (e) {
          await launch(fbWebUrl, forceSafariVC: false);
          print("Inside catch");
        }
      }
Sunil
  • 143
  • 1
  • 2
  • 11

1 Answers1

11

My working function:

void _launchSocial(String url, String fallbackUrl) async {
  // Don't use canLaunch because of fbProtocolUrl (fb://)
  try {
    bool launched =
        await launch(url, forceSafariVC: false, forceWebView: false);
    if (!launched) {
      await launch(fallbackUrl, forceSafariVC: false, forceWebView: false);
      }
  } catch (e) {
    await launch(fallbackUrl, forceSafariVC: false, forceWebView: false);
  }
}

Then in onPressed or onTab:

_launchSocial('fb://profile/408834569303957', 'https://www.facebook.com/dorockxl')

Don't forget to add fbYOURPAGEID to CFBundleURLSchemes array in Info.plist:

Note: You can use https://lookup-id.com to find your page's id

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb408834569303957</string>
        </array>
    </dict>
</array>

Btw you can use this method for Twitter and Instagram without an additional setting. Url is enough to open these native apps:

_launchSocial('https://www.instagram.com/YOURNAME/', '')

_launchSocial('https://twitter.com/YOURNAME', '')

LacOniC
  • 824
  • 12
  • 21
  • Which plugin you are using to launch url? because the above code throwing me an error. "Error: Method not found: 'launch'." – Ajithkumar S Oct 13 '20 at 04:02
  • I used url_launcher: ^5.5.0 on Flutter 1.20.1. Flutter is new so versions can have big differences. – LacOniC Oct 13 '20 at 18:56