How to de-duplicate notifications between native and progressive web app? - service-worker

If I have both a native app and a progressive web app using web push notifications powered by service worker, is there a way to prevent a user from receiving duplicate notifications if they opt in to receiving notifications from the web site and also have the app installed?

In short - there is no easy way to do this today.
There is a discussion on Chrome here on this: https://code.google.com/p/chromium/issues/detail?id=402223
The last comment from October 2015:
For now the safest minimal solution is for sites to provide an easy
opt out mechanism (which we strongly recommend you do anyway!) so
users can turn off notifications from one platform
Another possible heuristic based solution is to take some measure for
which interface (web or native) the user most often uses (or most
recently used) and only send to that. Combined with grouping these
devices by rough screen size should give a pretty good approximation.
The issue is that if the user has two similar sized devices and uses
native on one and web on the other then notifications will only be
delivered to one, which is an edge case.
We've also been discussing building an API so sites can tell whether
their corresponding native app is installed to avoid this case, but
need to start discussing that with other browser vendors to see if
they'd be supportive.

Related

Advice needed - Webview iOS application acceptance or workaround

Client wants to publish an iOS application as a starting point for their product which at the moment will be entirely single web view driven. There will be some networking calls to resolve some of the URLs, but the sign in and all content will be entirely on single web view. On top of that there is push notifications, which will redirect user to different parts of the website based on payload.
* They have an existing Android application that does this and they want an iOS counterpart.
Appstore guidelines state an iOS can't be a repackaged website and will likely get rejected. The purpose of this question is to find out if any of you fellow devs have gone through similar experience, and if so what was the outcome / recommendations to proceed.
The mobile apps will have native components in future, but at this moment as a starting point it's not the case.
Thanks

How do social networking apps update their UI in real-time?

I was wondering how social networking apps, such as Twitter, Facebook and WhatsApp update their user interface in real-time when another user interacts with the user of the app. To use the best example I can think of: when you have a chat window open in WhatsApp, the UI updates automatically (without any user actions required) when the user you're chatting with interacts with you. Messages appear on your screen without refreshing and the "last seen" status at the top of the screen updates automatically when your chat partner either goes offline or comes back online. I can think of two ways to achieve this:
Remote push notifications: this approach strikes me as the 'cleanest' way to do this, but it's probably also the riskiest way. Using silent notifications (content-available) to pass data to another device at the moment a user does something, would probably save you a lot of HTTP requests and therefore would make your app consume a lot less data and CPU usage. The risk of this approach is that a user can easily disable ALL push notifications to save battery power (including silent notifications) and then your app wouldn't be able to get notified on events remotely.
Local UI refreshing: This approach is obviously the safest, but I think it's really 'nasty' and eventually everyone would feel the downside of it. Constantly refreshing the UI and re-retrieving data from the database to make sure the latest messages and statuses are displayed to the user would be safe in the way that your app doesn't have to rely on the device's battery and background mode settings, but the downside is that this will make your app consume a lot of data and battery power, which would be bad for the user's data plan and his device. I also don't think Apple would approve of an app that's consuming so much data and power.
I've just implemented a chat function into my own app, and I want to enable the same real-time UI updating that WhatsApp uses. What would be the best way to do this? Should I use one of the two methods above or can someone think of another way to do this? By the way, I'm a relatively new programmer who just recently learned how to develop iOS apps (Swift). I'm very far from being a pro, so please go easy on the explanations and work method capabilities. Thanks!
The chat apps make use of WebSockets to create a constant connection with the client and a backend server.
This article on Appcoda can help you start learning about Socket.io. It answers your questions and also helps you to create a demo app.

Is there a single "analytics/marketing" SDK solution for mobile apps?

I hope this is not off topic for StackOverflow since it is not just software development related but also marketing. But I guess this problem is something we developers are all confronted to.
To monitor and market our iOS app, we use a bunch of third party SDKs:
Google Analytics to understand what's happening
a push notification system (e.g. Urban Airship)
a "smart" review prompting engine (e.g. Apptentive)
a testing / crash reporting system (e.g. Testflight)
should you want to run app installs ads, you also need the FB SDK, an SDK to track Twitter conversions, etc.
you may also want to track where other installs come from via something like Tapstream.
So we are already running more than 6 3rd party SDKs in our app, and it does not feel right:
each of them will do some kind of hand shake every time the app is opened
it's as many potential issues
each of them will have a different web interface
Is there a way to optimise all this, i.e. to have just one SDK doing most things? Or does someone know of a lib to wrap all this stuff under one lib for instance?
There is no getting around a few of these. If you want to talk with FaceBook, Twitter, etc. You will need their SDK no matter the 3rd party SDK you choose.
You could actually write your own setup to track and deal with everything, but there are those that have done it before.
For example, Parse will do:
Analytics
push notifications
a "smart" review prompting engine (you can do this yourself by reviewing the analytics)
crash reporting system
it also uses FB SDK, Twitter SDK already to help with user logins where users my want to use their credentials from their sites on your app
user login
cloud database
You could technically throw an "event" into the analytics to track how many folks are using your app that was installed from x store. However, this would require a different version of your app for each store. Sounds like an interesting idea none the less. Tapstreme and others are basically marketing though, not really something required to do something specific. You will need an SDK if they are tracking something specific themselves.
one web interface
There are multiple systems built like this. they are called BaaS or Backend as a Service.
Hope this helps, Cheers

real time messaging for multi player game on ios

Building a multi player iOS game where players compete one against the other. Nature of the game is synchronous. Basically, players either invite each other through facebook, email, etc and then start playing.
We debate what is the best strategy for facilitating the real time communication between players (sending events, etc). Coming from web development, we used comet and long polling which worked great. However, it's not clear what's the best way to achieve that on iOS.
Seems like APN (Apple Push Notifications) is not suitable in our case for two reasons: the delay can be pretty significant, up to few seconds, as far as we understand. Also, using APN requires the user to authorize notifications. If the user doesn't authorize this then it won't be possible to play the game.
Also, we understand Apple's Game Kit (Game Center) can be of value in our case however it's not clear how it interacts with invites through facebook etc. Also, not clear if we need to get into bed with Apple's Game Center and how it'll affect the user experience.
Any guidance on this matter as well as other options that you might think of would be greatly appreciated.
Thanks for your help.
Before you read the rest, a disclaimer: I work for Realtime.co but I do believe I can help here so I'm not trying to "pitch a sale".
If you need to have real time updates, you can check out Realtime (www.realtime.co). It's basically a set of tools for developers to use real time technologies on their projects. It uses websockets but does fallback to whatever the user's browser supports (such as long polling, for example) if you are using a browser (which is not your case, but it's always good to know).
Behind Realtime you have a one-to-one/one-to-many/many-to-many messaging system that will transport your messages to and from your users.
There's a iOS API too which you can use in your project. You can download it here: http://www.xrtml.org/downloads_62.html#ios and check the documentation here: http://docs.xrtml.org/getting_started/hello_message.html#ios.
There's also a plus which is the fact that the Realtime framework is actually cross-platform. This means that you can even have your iOS players to communicate with players using Android, Windows Phone, HTML5, Flash, etc. if you decide on expanding your game to other platforms.
I hope that helps!
I'll just provide some insights on the question.
APN should never be used for synchro communication as for iOS at least, you'll never have both way communication (basically the Apple APN servers are pushing an information to the device).
You should probably play with C sockets in order to open a tunnel (depends if your game is real time or not).
Using the Apple Framework GameKit is great! But might take some time to understand all the functionnalities.
Check out Gree
https://developer.gree.net/en/
Parse:
https://www.parse.com/
Sparrow:
http://gamua.com/sparrow/
There are a few things that your talking about, there is the joining/starting of a game, and then the communication between the players. They are not necessarily related.
You can use game-center and at the same time another framework for facebook, they are not mutually exclusive (but it would be more work.)

Stuck at making decision between native app or web app

I'm currently graduating at a small company which makes and sells accounting software.
My task during my graduation is to make a Mobile application which supports some functionality of this software.
For instance: making a report on site and uploading it to the server,logging hours worked, retrieving sales information etc..
I'm currently doing research on which platform I should deploy but I'm getting confused in what shape my application should be made.
I can't make a choice what I should recommend, Web app or Native app?
I need help making a recommendation:
Security is important. (we deal with confidential information)
Maintenance is very important. (they will have to support it in the future and have low resources available. (small company))
Development costs (I have no clue here.)
User experience (Because this is a business app, is a web app good enough?)
The business market here is currently very iOS (Apple) saturated (about 80%) but I do need to think of the future. (Android, WP7)
So What do u recommend with the given information, web or native? Do I need more information before making a decision / recommendation if so, what sort of information?
ps I think this question belongs on stackoverflow, if not please move it to the appropriate site.
For what you're looking to accomplish, I'd recommend taking the mobile web app route. Here's why:
Security is important. (we deal with confidential information)
You could make a case either way, but I feel that a mobile web app is better for security. Like Ganzolo said, it can have as much security as a typical web app. Also, since it doesn't store data on the device itself, you won't have to worry about a data breach in the event of a lost or stolen phone (assuming you're not using HTML5 offline storage).
Maintenance is very important. (they will have to support it in the future and have low resources available. (small company))
Mobile web apps have an advantage here. If you built native apps, you'd have to build and maintain separate apps for each platform. On the other hand, since one mobile web app reaches all platforms, you'd only ever have to maintain one app. Also, you won't have to update a mobile web app with each OS update, like you would with a native app. If you want to go one step further, you could even build a mobile web app with separate presentation layers for smartphones, tablet, and PCs (like this). That way, one mobile app would look different (yet native) on any device, but you'd only have to maintain one underlying application.
Development costs (I have no clue here.)
Depends on how many platforms you want to reach. If you're building for one platform, the costs are similar. If you're building for multiple platforms, mobile web apps are far cheaper. One mobile web app reaches all platforms, whereas you'd have to build a separate native app for each platform.
User experience (Because this is a business app, is a web app good enough?)
You'll get a better UI with a native app, but a mobile web app should be more than sufficient for most business apps. Use a good mobile framework (like jQuery Mobile), and you can build a mobile web app that looks and feels almost native.
The business market here is currently very iOS (Apple) saturated (about 80%) but I do need to think of the future. (Android, WP7)
Mobile web apps are a much safer choice for the future. Who knows what the mobile platform landscape will look like in 2 or 3 years? Maybe WP7 will be popular. Maybe some new OS will be popular. It changes so fast, there's no way to know. The only thing I do know is this: The web will still be popular. If you build a mobile web app, you insulate yourself from all future mobile OS battles.
I hope that helps.
My personal opinion would be to go for a web App :
• Security is important. (we deal with confidential information)
Sercurity in a web app cannot be worse than security in a regular website (like online banking)
• Maintenance is very important. (they will have to support it in the
future and have low resources available. (small company))
Maintenance is really easy for a web app since you can make updates without going through the process of submitting your app to the store and waiting.
• Development costs (I have no clue here.)
Development cost will be lower with a web app as you'll have 1 code for every phones (and most of them are using webkit which will be simplier)
• User experience (Because this is a business app, is a web app good
enough?)
It's hard to answer this question without knowing your project but for simple UI it can be good enough
• The business market here is currently very iOS (Apple) saturated
(about 80%) but I do need to think of the future. (Android, WP7)
Yes you need to think about the future that the most important because you can only do simple functionality in web apps. So if future requirement, will have more complex functionality then you'll have to move into native apps.
Hope I've been helpful
In my experience, web apps always tend to be sluggish on the UI front. I would always opt for a native app, if you don't have to support multiple platforms at once (iOS, Android, generic).
Security: Make your app connections over SSL
Maintenance: The only problem here is that you may have to wait 7 days for App Store approval for native apps
Development costs: Depends on who makes the app, shouldn't be too different.
UX: Defenitely native!
Multiplatform: As I said, for multi platform a web app is probably best
If you opt for a web app, make sure the user doesn't have the impression of "the app isn't doing anything" while loading stuff.

Resources