app_links 3.1.0 copy "app_links: ^3.1.0" to clipboard
app_links: ^3.1.0 copied to clipboard

Android App Links, Deep Links, iOs Universal Links and Custom URL schemes handler for Flutter.

app_links #

Android App Links, Deep Links, iOs Universal Links and Custom URL schemes handler.

This plugin allows you to:

  • catch HTTPS URLs to open your app instead of the browser (App Link / Universal Link).
  • catch custom schemes to open your app (Deep Link / Custom URL scheme).

Getting Started #

Before using the plugin, you'll need to setup each platforms you target.

Android #

iOs #

Windows #

Setup

Declare this method in <PROJECT_DIR>\windows\runner\win32_window.h

  // Dispatches link if any.
  // This method enables our app to be with a single instance too.
  // This is optional but mandatory if you want to catch further links in same app.
  bool SendAppLinkToInstance(const std::wstring& title);

Add this inclusion at the top of <PROJECT_DIR>\windows\runner\win32_window.cpp

#include <app_links_windows/app_links_windows_plugin.h>

Add this method in <PROJECT_DIR>\windows\runner\win32_window.cpp

bool Win32Window::SendAppLinkToInstance(const std::wstring& title) {
  // Find our exact window
  HWND hwnd = ::FindWindow(kWindowClassName, title.c_str());
  
  if (hwnd) {
    // Dispatch new link to current window
    SendAppLink(hwnd);

    // (Optional) Restore our window to front in same state
    WINDOWPLACEMENT place = { sizeof(WINDOWPLACEMENT) };
    GetWindowPlacement(hwnd, &place);
    switch(place.showCmd) {
      case SW_SHOWMAXIMIZED:
          ShowWindow(hwnd, SW_SHOWMAXIMIZED);
          break;
      case SW_SHOWMINIMIZED:
          ShowWindow(hwnd, SW_RESTORE);
          break;
      default:
          ShowWindow(hwnd, SW_NORMAL);
          break;
    }
    SetWindowPos(0, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
    SetForegroundWindow(hwnd);
    // END Restore

    // Window has been found, don't create another one.
    return true;
  }

  return false;
}

Add the call to the previous method in CreateAndShow

bool Win32Window::CreateAndShow(const std::wstring& title,
                                const Point& origin,
                                const Size& size) {
if (SendAppLinkToInstance(title)) {
    return false;
}

...

Great!

Now you can register your own scheme.
This package can not do it for you.
You can make it with url_protocol inside you app.
But... The most relevant is to include those registry modifications into your installer to allow the unregistration.


final _appLinks = AppLinks();

// Get the initial/first link.
// This is also useful when app was terminated (i.e. not started)
final uri = await _appLinks.getInitialAppLink();
// Do something (navigation, ...)

// Subscribe to further events when app is started.
// (Use stringLinkStream to get it as [String])
_linkSubscription = _appLinks.uriLinkStream.listen((uri) {
    // Do something (navigation, ...)
});

...

// Maybe later. Get the latest link.
final uri = await _appLinks.getLatestAppLink();

Android notes:

  • Intent action is filtered by Intent.ACTION_VIEW.

  • By default, flutter Activity is set with android:launchMode="singleTop". This is perfectly fine and expected, but this launches another instance of your app, specifically for the requested view.
    If you don't want this behaviour, you can set android:launchMode="singleInstance" in your AndroidManifest.xml and avoid another flutter warmup.

Tests #

The following commands will help you to test links.

Android #

adb shell am start
    -W -a android.intent.action.VIEW
    -d "<URI>" <PACKAGE>

For App Links, you can also test it from Android Studio: Documentation.

iOs #

/usr/bin/xcrun simctl openurl booted "<URI>"
487
likes
0
pub points
99%
popularity

Publisher

verified publisheropenapi4j.org

Android App Links, Deep Links, iOs Universal Links and Custom URL schemes handler for Flutter.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

app_links_platform_interface, app_links_web, app_links_windows, flutter

More

Packages that depend on app_links