<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        >
<channel>
  <title>asgaard</title>
  <description></description>
  <link>https://blog.asgaard.co.uk/ionic-native</link>
  <lastBuildDate>Wed, 15 Apr 26 23:42:41 +0000</lastBuildDate>
  <language>en</language>
  <count>1</count>
  <offset>0</offset>
      <item>
    <title>Ionic Native</title>
    <link>https://blog.asgaard.co.uk/ionic-native</link>
    <pubDate>Fri, 01 Jan 21 10:21:58 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/ionic-native</guid>
    <description><![CDATA[
<p>
Ionic is a framework for developing mobile apps. I&#039;ve completed a few successful projects using Ionic. I like Ionic. I think that as far as cross platform mobile development goes, Ionic is pretty good.
<p>
Ionic was built on Cordova, and has been gradually moving away from it with Capacitor. I like Capacitor better than Cordova. I think they&#039;ve done a really good job.
<p>
Ionic Native is a set of Cordova plugins that they&#039;ve provided a wrapper for. If you look at the list, it looks very impressive. If you try to use any of them, though, it&#039;s a toss up as to whether you end up with something production standard. Some of the plugins there shouldn&#039;t be on the list because they&#039;re just broken.
<p>
The Local Notification plugin is a good example of this. Currently, it&#039;s pointing at the underlying Cordova plugin version 0.9.0-beta2. At the time of writing, this is around three years old. The most recent version is 15 months old. So not only is the plugin not actively maintained, we&#039;[...]]]></description>
    <content:encoded><![CDATA[
<p>
Ionic is a framework for developing mobile apps. I&#039;ve completed a few successful projects using Ionic. I like Ionic. I think that as far as cross platform mobile development goes, Ionic is pretty good.
<p>
Ionic was built on Cordova, and has been gradually moving away from it with Capacitor. I like Capacitor better than Cordova. I think they&#039;ve done a really good job.
<p>
Ionic Native is a set of Cordova plugins that they&#039;ve provided a wrapper for. If you look at the list, it looks very impressive. If you try to use any of them, though, it&#039;s a toss up as to whether you end up with something production standard. Some of the plugins there shouldn&#039;t be on the list because they&#039;re just broken.
<p>
The Local Notification plugin is a good example of this. Currently, it&#039;s pointing at the underlying Cordova plugin version 0.9.0-beta2. At the time of writing, this is around three years old. The most recent version is 15 months old. So not only is the plugin not actively maintained, we&#039;re also out of date even by the plugin&#039;s standards. 
<p>
Unfortunately it doesn&#039;t work very well on modern Android operating systems. Trying to schedule a repeating notification causes the plugin to go into an infinite loop until the OS steps in and kills it, so the workaround is to set a notification with a large &#039;count&#039;. This causes very slow interaction with the notification in future, presumably because the operating system is dealing with a notification instance per count. This is something you can work around by scheduling, say, 100 days in advance and making sure your app reschedules when you&#039;re getting close to the end of the 100 days. You shouldn&#039;t have to do this, but it&#039;s an option.
<p>
However, there&#039;s a much more serious problem in that the plugin can&#039;t schedule notifications that persist past the device rebooting. There are a few use cases where this may be acceptable, but for a general notification system, this is a deal-breaking limitation that you don&#039;t find out about until testing (and physically testing notifications is tedious and error prone enough already).
<p>
Then there&#039;s the in app purchases plugin. The IAP plugin is bizarre. When dealing with subscriptions, there is no way of simply querying whether the user owns a subscription, because the &#039;owned&#039; field isn&#039;t reliable. When the plugin starts up, a subscription goes through a variety of states, but always starts with owned = false. Maybe it reaches owned = true, maybe it doesn&#039;t. The point is that owned = false is never a useful piece of information because there&#039;s no guarantee it&#039;s correct. This means that there is no completely reliable way of determining whether a user&#039;s subscription has expired. You have to look at the subscription billing period and be aware of when it may have expired, and if you go a certain length of time with successful communication with the plugin but without seeing owned = true you then assume that it must have expired. This is absurd, and I would be extremely surprised if the underlying billing library exposes subscription information in this way.
<p>
Ionic should not be providing wrappers (and exposure) for these plugins unless they meet a certain standard. It&#039;s a waste of developers&#039; time to attempt to use sub-standard plugins and will fuel a perception that it&#039;s difficult to achieve production quality software using Ionic.
<p>
Update: Another one - <a href='https://ionicframework.com/docs/native/native-audio'>Ionic Native Audio</a> doesn&#039;t work with Capacitor because it hard codes audio assets as existing within the www/ directory. In Capacitor, this directory has been named public/ so the plugin can&#039;t find any of your audio assets. Again, why is this being advertised by Ionic, with Capacitor instructions?
<p>
See also <a href='https://markwatkinson.com/posts/ionic-cordova-quality'>Ionic Native quality issues</a>.]]></content:encoded>
  </item>
  </channel>
</rss>