"Visited campaign" best practise


we’re implementing an Estimote-Eddystone beacon scenario:

  • User gets into a coffee shop, enters Beacon range (the shop’s beacon has a coupon linked)
  • Beacon triggers app, app sends BeaconID and some sort of ClientID to the server
  • Server finds the campaign (coupon), checks the campaign as “delivered” for the ClientID and responds with campaign data
  • Phone displays campaign data, user redeems coupon - everybody happy


The user sits then for 5 hours in the cafe. The Beacon would trigger the phone every 1 second, it would make a call to the server, server would not return the campaign, because it’s marked as “delivered” or “redeemed”. However, the phone keeps polling the server triggered by the Beacon 60 * 60 * 5 times until the client leaves.

What’s best practise to avoid such a scenario?

Do you usually store BeaconIDs with some sort of status on the phone? This, however, takes battery life as well because the phone still has to do some checking every 1 second.

Thanks a lot,

Hi @thomash,

do you think you could do an app’ that scans only if the campaign is marked as “not delivered”?

When your customer enters for the first time, the app’ is scanning (monitoring more precisely), it sends a notification to the server and the server answers with campaign data -> campaign duration.
So your app’ knows for how long it has not to scan.

Hi Ximun,

thanks for the reply.

We could do that, but wouldn’t the app/the phone still receive every 1 sec the signal and do a “check(beaconID, duration): if duration passed, dont do anything”?

Doesn’t that leech battery life as well? Is there some sort of Android/iOS mechanism for that?


You want you app’ to be sort of “desactivated”?

I don’t know how to do that, but it could be possible I think.