Skip to content
Native apps

The same support, inside your own app

Nine native packages bring the widget inside your app — unread badge, chat, AI agent and release notes, with push on mobile — including stacks that are usually left out, such as Delphi 7 and Lazarus.

  • One key for every platform
  • Content from the server, no new store release
  • Verified identity
Where it runs

Pick your stack

All nine native packages are published, each one on the package manager of its platform. Where there is no package, the web widget works in any app with a WebView.

Mobile

  • Flutter 0.1.0 Android, iOS, macOS and Windows pub.dev · bfocus_widget Source on GitHub Live
  • iOS 0.1.2 UIKit and SwiftUI, iOS 15+ Swift Package Manager · BFocusWidget Source on GitHub Live
  • Android 0.1.0 Views and Compose, minSdk 24 Maven Central · bfocus-widget-android Source on GitHub Live
  • React Native 0.1.0 works with Expo npm · @bfocus/react-native-widget Source on GitHub Live

Desktop

  • .NET 0.1.1 WinForms, WPF and MAUI NuGet · Bfocus.Widget.WinForms, .Wpf, .Maui Source on GitHub Live
  • Delphi 10.4+ with TEdgeBrowser and Delphi 7 with a native screen Boss Source on GitHub Live
  • Lazarus Windows, Linux and macOS GitHub · package/bfocus_widget_lcl.lpk Source on GitHub Live
  • Java 0.1.0 JavaFX and Swing Maven Central · bfocus-widget-javafx, -swing Source on GitHub Live
  • Python 0.1.1 Qt (PySide6) and native Tk PyPI · bfocus-widget Source on GitHub Live

Web and packaged

  • Web the ten-line snippet CDN · widget.bfocus.com.br/v1 Live
  • Electron · Tauri · Capacitor · Ionic they use the web widget, no extra package Live
  • VB6 · Harbour · Visual FoxPro · PowerBuilder browser mode, with a signed session Live

Delphi installs through Boss. Lazarus comes straight from the repository: clone it and open the bfocus_widget_lcl.lpk package. The others come from the registry of each platform.

All repositories at github.com/bernisoftware

In your code

A few lines in any language

The snippets below are the same ones in the README of each package.

WebNative
<!-- before </body> -->
<script>
  (function (w, d) {
    w.bFocusQueue = w.bFocusQueue || [];
    w.bFocus = w.bFocus || { init: function(o){ w.bFocusQueue.push(['init', o]); } };
    var s = d.createElement('script');
    s.async = true; s.src = 'https://widget.bfocus.com.br/v1/widget.js';
    s.setAttribute('data-bf-key', 'bf_pk_…');
    d.head.appendChild(s);
  })(window, document);
  bFocus.init({
    user:     { externalId: 'USR-123', name: 'João Silva' },
    customer: { externalId: 'EMP-456', name: 'Empresa Ltda' },
    userHash: '…'   // signed on YOUR server
  });
</script>

Web widget — live, served from the CDN

In the packages

What each package delivers

The essentials work in all of them. Where the platform changes how, the text says which.

Unread badge

A reactive counter you hang on the icon your interface already has.

Release notes and read receipts

A version pill and a banner for the latest note, with a read confirmation whenever you require one.

Push with your own credentials

On Flutter, iOS, Android, React Native and .NET MAUI, the notification goes out through your Firebase project, with your app's name and icon. On desktop, the badge and the system notification come from periodic checks.

Deep link

Opens straight into the ticket or the release note; on mobile, also from a tap on the notification with the app closed.

Attachments and downloads

Send a photo or a document and download what the agent replied with, using the right permissions on each system.

No connection

In the WebView packages, a screen of its own for when the network is down, with an automatic retry as soon as it comes back.

Questions about the packages

Where do I install the packages from?

From the package manager of each platform: pub.dev, Swift Package Manager, Maven Central, npm, NuGet and PyPI. Delphi installs through Boss and Lazarus comes straight from GitHub. The source of all of them is at github.com/bernisoftware.

Do I have to release the app again when I change something in bFocus?

No. In the WebView packages, the interface comes from the CDN. In all of them, text, colors, knowledge base and agent come from the server, with no new app release.

What if my system is too old for a WebView?

There is browser mode: your system opens the widget in the default browser with the session already signed, and the user stays identified. That is how VB6, Harbour and Visual FoxPro work.

What is the difference between the public key and the signature?

The public key identifies your account and can stay visible in the app. The HMAC signature, computed on your server, is what proves the user is who they say they are — with verified identity switched on, bFocus turns away anyone without it. It lasts 7 days: your server issues a new one when it expires.

Do I have to register an origin for the native package?

You do. The native package’s origin is app:// followed by the app id, and it goes in the same authorized domain list as the widget. There the id is checked in full: app://com.customer does not allow app://com.customer.other, because the host is an app identifier, not a domain. Register one per app. On the web it is the other way round: the root domain already covers the subdomains.

Put support inside your app

Install the package for your stack or start with the web widget. The key is the same.