Not sure if this is because it is on the web (via ionic serve), but the plugin should work on web, android, iOS. Should I not get readings back from the sensors?
If I run my code native on Android, then the request permission also does not work, and I do not even get the event from the Motion plugin back.
Question:
Does anybody have any pointers/links to tutorials, github repos, etc. that have a working example of that plugin?
Has anybody worked with this plugin across PWA, android, iOS and can confirm that it actually works in v2/v3 beta?
With capacitor now in v3 beta, should we still start projects with v2?
What is going to happen to ionic native long term? Are you maintaining the long existing list of ionic native plugins or will efforts be shifted to grow capacitor? (Apologies if I have missed a blog article on that in the past.)
Just wondering if anybody has some ideas around this please. This forum unfortunately seems “pretty quite” - does anybody else have ideas for community support?
You only have to request the permission on iOS 13+, so first check if DeviceMotionEvent.requestPermission is defined, and if not, don’t try to request the permission because it’s not needed and won’t work.
Hey , I’m having the exact problem you have with capacitor motion plugin in version 3,have you found out something?
I tried controlling request permission not found exception (on Android), and even then, adding Motion.addlistener returns ok (no catch code being executed) but no event is fired…
I’m starting to get really disappointed with this platform, as I’m having very bad heading measures from background geolocation plugin as well, compared with cordova plugin for this (but at least works, adding the corresponding permissions to Android manifest)…
I read those documents to learn that the motion plugin is virtually incompatible with Safari, which would have saved me some time.
The example code supplied on the Capacitor page doesn’t work with Ionic, so that also wastes time.
I used Ionic because it is meant to save me time. There are web based compass examples that do appear to work, but I am not knowledgeable enough to know how to implement that code within Ionic.
You can check the Motion page on our capacitor-testapp repository, it’s react based, but should be similar on any framework.
Since on iOS 13+ you have to request permissions, you have to check DeviceOrientationEvent !== undefined && typeof DeviceOrientationEvent.requestPermission === 'function' and show some button to request permissions if that returns true (should return true on iOS 13+ only).
=> Property 'requestPermission' does not exist on type '{ new (type: string, eventInitDict?: DeviceOrientationEventInit): DeviceOrientationEvent; prototype: DeviceOrientationEvent; }'.ts(2339)
I tried without this function and it works fine on my side but, I suppose I have to ask the permission to the user.
Well, that’s typescript complaining about a web API that it doesn’t understand, might be a configuration thing on your side or a bug on some typing file.
You can always cast to any to get rid of those kind of issues, something like (DeviceMotionEvent as any).requestPermission
Yes this is exactly what I did and with this workaround, it works fine. It seems to work also with array.
So to sum up:
❌ DeviceOrientationEvent.requestPermission()
âś… (DeviceOrientationEvent as any).requestPermission()
âś… DeviceOrientationEvent['requestPermission']()
However, this plugin works on native devices (not with the live reload mode without SSL) but I don’t get the prompt that ask me to accept or reject the permission. I don’t know if this is the normal behavior. I suppose, not.
Given that it’s a fresh blank install of Ionic, I don’t think this is an issue in my code since there is nothing but this plugin with the basic configuration. I saw that other people have a similar problem. So I guess it’s a problem in the plugin code or in the Typescript checker of Visual Studio Code (which is the software I use).
But do you get granter or rejected on the requestPermission call?
Do you get the motion data?
Depending on the iOS version it will prompt every time you call requestPermission or will just ask the first time you call requestPermission and remember for the following calls.
I actually didn’t have the requestPermission dialog. I tried to uninstall the app and re-install it to try to show this prompt message but nothing. Maybe Should I have to define something in the info.plist or something else?