airgap-it / beacon-ios-sdk

The beacon sdk allows iOS developers of dApps and wallets on Tezos to implement the wallet interaction standard tzip-10.
MIT License
8 stars 13 forks source link

Deeplinking question / discussion #4

Open simonmcl opened 3 years ago

simonmcl commented 3 years ago

When trying to connect to a website you need to scan a QR code which has the url tezos://xxxxxxxxx. This will allow users to scan with their camera app and get a link to a wallet/app

There is an issue on iOS though, that when multiple apps request to use tezos as a URL scheme, which one will be launched is "undefined". iOS doesn't currently display a share sheet style screen to list all the apps, it just picks one. While experimenting with this library I had AirGap installed on my phone and was unable to get the QR code to launch my app, until I deleted AirGap. Relying on this as a method of opening apps is going to cause a headache for users as the number of apps grow.

Short term it would be a good idea to promote the idea that third party apps should embed their own QR scanner, it might be good for BeaconSDK to include a basic one in-built in the SDK. I'm also not sure if i missed it or not, but I found no code in the library to take a tezos://xxxxxx URL and turn it into a P2P class or even turn the data into JSON. I also couldn't find any documentation on how it was encoded or what to do with it. I had to go read the code of a website to see what they did. If such a function doesn't exist, it really needs too. If it does, it should be added to the README documentation.

Longer term, it might be a good idea to try build a website with buttons/deeplinks to whitelisted mobile apps. When the QR code is scanned with the inbuilt camera app, it would bring users to an AIrGap website, with a list of options to launch various apps from there. Hopefully it could be done in such a way that scanning with the default camera app went to the webpage, but scanning with custom in-app, would still contain the necessary data

AndreasGassmann commented 3 years ago

I can't comment on the internals of the sdk, @jsamol will do that when she has time.

Regarding the deeplinks in general, it is indeed a very annoying situation now. The way we are doing it with beacon is the following:

The idea of a website that acts as a "middle man" is interesting. We'll have to think about this a little more. It would probably increase usability for users who use the stock scanner on iOS and have multiple wallets installed, but it will actually decrease the usability in case the user only has one wallet (iOS), or he is on Android, because it will add an extra "unnecessary" step. It also requires our website to be up at all times and requires users to trust our website, because we could provide a malicious QR code. But on the other hand it would solve the problem of having a pairing alert with too many apps in the list.

A lot of positive and negative points, I'll have to think about it a bit more :).

jsamol commented 3 years ago

I'm also not sure if i missed it or not, but I found no code in the library to take a tezos://xxxxxx URL and turn it into a P2P class or even turn the data into JSON.

You haven't missed anything, there's no support for deeplinks in any way in beacon-ios-sdk for now. It's been on our radar, though, and we'll get there eventually.