npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@nativescript/ionic-portals

v1.2.1

Published

Ionic Portals - Supercharged Web Views for iOS and Android

Downloads

373

Readme

@nativescript/ionic-portals

https://ionic.io/docs/portals

Ionic Portals are supercharged native WebView components for iOS and Android that let you add web-based experiences to native mobile apps.

Ionic Portal View

Contents

Installation

npm install @nativescript/ionic-portals

Prerequisites

Usage

1. Registering portals

To register your Ionic Portals, call the [IonicPortalManager] class's register method with the Portal API key.

import { Application } from '@nativescript/core';

import { IonicPortalManager } from '@nativescript/ionic-portals';

Application.on(Application.launchEvent, () => {
	// Register IonicPortals
	IonicPortalManager.register('<portal-api-key>');
});

// boot app here, for example:
Application.run({ moduleName: 'app-root' });

Create as many Portals as you need to use in your app.

The app will look for folders within its resources where the folder name is equal to the portal id you used to define each portal.

Given the following examples, ensure your web portal is built into the following folders:

  • For iOS: App_Resources/iOS/webPortal
  • For Android: App_Resources/Android/src/main/asssets/webPortal

2. Use it in markup

Core

<Page xmlns="http://schemas.nativescript.org/tns.xsd"
  xmlns:ionic="@nativescript/ionic-portals">
  <StackLayout class="p-20">
    <ionic:IonicPortal id="webPortal">
    </ionic:IonicPortal>
  </StackLayout>
</Page>

Angular

import { registerElement } from '@nativescript/angular';
import { IonicPortal } from '@nativescript/ionic-portals';
registerElement('IonicPortal', () => IonicPortal);
<IonicPortal id="webPortal"></IonicPortal>;

Vue

import { IonicPortal } from '@nativescript/ionic-portals';

registerElement("IonicPortal", ()=> IonicPortal)
 <gridLayout height="300" class="mt-3 p-3">
    <IonicPortal id="webPortal"/>
</gridLayout>

Svelte

import { IonicPortal } from '@nativescript/ionic-portals';

import {registerNativeViewElement} from "svelte-native/dom"
registerNativeViewElement("ionicPortal", ()=> IonicPortal)
<gridLayout height="300" class="mt-3 p-3">
    <ionicPortal id="webPortal"/>
</gridLayout>

Sending events from NativeScript to any web portal

To send events from NativeScript to any web portal, use the publishTopic() method:

IonicPortalManager.publishTopic('hello', { name: 'data from NativeScript' });

Subscribing to events sent from web portals

To subscribe to events sent from any web portal, call the subscribeToTopic method with the event name as the first argument and the event handler as the second argument.

const subscriptionId = IonicPortalManager.subscribeToTopic('useful-web-event', result => {
  console.log('received web portal useful-web-event with data:', result.data);
});

Unsubscribing from events sent from web portals

To unsubscribe from events sent from any web portal, call the unsubscribeFromTopic() method with the event name as the first argument and the subscription id as the second argument.

IonicPortalManager.unsubscribeFromTopic('useful-web-event', subscriptionId);

IonicPortalManager API

Allows you to interact with and configure portals via the following APIs.

register()

IonicPortalManager.register(apiKey)

Registers portals. Call it in the main.ts file, before the app boots, in the handler of the Application.launchEvent event.

| Parameter | Type | Description |:----------|:-----|:----------- | apiKey | string | Your portal API key

setInitialContext()

IonicPortalManager.setInitialContext(id,initialContext)

Used to set the initial context of any portal id before the portal is shown.

| Parameter | Type | Description |:----------|:-----|:----------- | id | string | The portal id. | initialContext | string | Data provided as the initial context to the portal.


setAndroidPlugins()

IonicPortalManager.setAndroidPlugins(plugins)

Defines the usage of non-official Capacitor Plugins via Android package names

| Parameter | Type | Description |:----------|:-----|:----------- | plugins | Array<string> | A list of non-official Capacitor package names.

publishTopic()

IonicPortalManager.publishTopic(topic, data)

Sends a message to any web portal by publishing a topic (aka. event)

| Parameter | Type | Description |:----------|:-----|:----------- | topic | string | The name of the topic/event | data | any | Optional: The payload to send with the topic.

subscribeToTopic()

subscriptionId: number = IonicPortalManager.subscribeToTopic(topic, (data?: any) => void))

Listens to any message sent from any web portal by subscribing to the specified topic. It returns a subscription id used to later unsubscribe from the topic.

| Parameter | Type | Description |:----------|:-----|:----------- | topic | string | The name of the topic/event to subscribe to. | callback | function | The function invoked every time a message is sent via the topic with an optional data parameter.


unsubscribeFromTopic()

IonicPortalManager.unsubscribeFromTopic(topic, subscriptionId)

| Parameter | Type | Description |:----------|:-----|:----------- | topic | string | The name of the topic/event to unsubscribe from. | subscriptionId | number | The subscription id returned by subscribeToTopic().

configureLiveUpdates

Note: configure before displaying the portal.

IonicPortalManager.configureLiveUpdates('webPortal', {
	appId: 'e2abc12',
	channel: 'production',
	syncOnAdd: true
})

| Parameter | Type | Description |:----------|:-----|:----------- | portalId | string | The portal id. | config | IonicPortalLiveUpdateConfig | Live update configuration.

syncNow

IonicPortalManager.syncNow(['e2abc12'], false, status => {
	console.log('sync complete:', status)
})

| Parameter | Type | Description |:----------|:-----|:----------- | appIds | Array<string> | Portal app ids to sync. | isParallel | boolean | Whether to sync in parallel or not. | complete | (status: string) => void | Complete callback.

getLastSync

const lastSync = IonicPortalManager.getLastSync('e2abc12')

| Parameter | Type | Description |:----------|:-----|:----------- | appId | string | Portal app id to check last sync.

Using Capacitor Plugins with Ionic Portals

Refer to this blog post.

Notes

For iOS: You may need to add IPHONEOS_DEPLOYMENT_TARGET = 12.0 to your App_Resources/iOS/build.xcconfig file. If your project contains App_Resources/iOS/Podfile, you may need to remove any post install handling which removes deployment targets, for example: Remove anything like this: config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'

Additional Resources

License

Apache License Version 2.0