2015-04-29 11 views
14

Sto usando Cordova/Phonegap iBeacon plugin con ionicframework nel mio progetto cordova. Sto tentando di inviare una notifica locale sia su android che su ios con cordova local notification plugin mentre entri nell'area monitorata, quando l'app viene uccisa.Cordova ibeacon; Invia notifica locale dopo l'uccisione dell'app, ma non funziona su Android

Ecco il mio codice:

document.addEventListener("deviceready", onDeviceReady, false); 

    function didDetermineStateForRegion(pluginResult) { 
    } 

    function didStartMonitoringForRegion (pluginResult) { 
    } 
    function didExitRegion(pluginResult) { 
     $cordovaLocalNotification.add({ 
     id: 30244234234, 
     title: "Good By!", 
     text: "Hope to see you again." 
      }).then(function() { 
      }); 
    } 

    function didEnterRegion (pluginResult) { 
     $cordovaLocalNotification.add({ 
     title: "Welcome", 
     text: "Tap to launch app" 
      }).then(function() { 

      }); 

    }; 
    function didRangeBeaconsInRegion (pluginResult) { 

    } 

    function onDeviceReady() { 
     // Now safe to use device APIs 
     function createBeacon(uuid,nofiyState) { 

      var uuid = uuid; // mandatory 
      var identifier = 'estimote'; // mandatory 

      // throws an error if the parameters are not valid 
      var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid); 
      beaconRegion.notifyEntryStateOnDisplay = true; 
      return beaconRegion; 
     } 
     var delegate = new cordova.plugins.locationManager.Delegate(); 
     delegate.didDetermineStateForRegion = didDetermineStateForRegion; 

     delegate.didStartMonitoringForRegion = didStartMonitoringForRegion; 

     delegate.didRangeBeaconsInRegion = didRangeBeaconsInRegion; 
     delegate.didEnterRegion = didEnterRegion; 
     delegate.didExitRegion = didExitRegion; 

     var beaconRegion = createBeacon('02681445-8D1B-4F58-99D4-B25F4B129A58',true); 
     // var beaconRegionBlue = createBeacon('02681445-8D1B-4F58-99D4-B25F4B129A58',1,,true); 
     cordova.plugins.locationManager.setDelegate(delegate); 

     // required in iOS 8+ 
     //cordova.plugins.locationManager.requestWhenInUseAuthorization(); 
     cordova.plugins.locationManager.requestAlwaysAuthorization(); 
     cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion) 
     .fail(console.error) 
     .done(); 

    } 

plugin Cordova: versione

com.unarin.cordova.beacon 3.3.0 "Proximity Beacon Plugin" 
de.appplant.cordova.plugin.local-notification 0.8.1 "LocalNotification" 
nl.x-services.plugins.socialsharing 4.3.16 "SocialSharing" 
org.apache.cordova.console 0.2.13 "Console" 
org.apache.cordova.device 0.3.0 "Device" 

Cordova: 4.3.0

questo funziona bene per iOS, anche se l'applicazione viene ucciso, ma su Android le notifiche vengono visualizzate solo se l'app è in background. Quando uccido l'app da Task Manager su Android non ho mai visto nessuna notifica locale.

E 'possibile ricevere notifiche su Android anche se l'app viene uccisa?

grazie per l'aiuto.

+0

Se si interrompe l'app tramite Impostazioni-> App-> MyApp-> Force Stop, l'app e tutti i processi vengono interrotti anche se si ascolta lo sfondo. Altrimenti è necessario il servizio in background in Android per ottenere il messaggio/notifica locale. –

+1

Non penso che tu possa ricevere le notifiche dopo aver ucciso l'app tramite il task manager. Ho un'applicazione simile usando framework ionico e cordova, Per ottenere notifiche dall'app anche quando è in esecuzione sullo sfondo, sto usando un plug-in modalità background cordova su https://github.com/katzer/cordova-plugin-background -modalità .Ti permetterà di eseguire la tua logica anche quando l'app non è in esecuzione attivamente in primo piano. – nthapa13

+0

@MorrisonChang Non impongo mai all'app di fermarsi come hai detto tu; lo interrompo premendo a lungo il tasto home, cioè intendo il task manager. – semirturgay

risposta

4

lascia chiaro alcune cose, ci sono stati che sono anni di confusione:

  1. App come un servizio
  2. applicazione in esecuzione in background (cioè ridotto al minimo).
  3. App ucciso (non in esecuzione a tutti)

in tutti i casi il 3 ° stato in cui si uccide app (tramite pressione prolungata di nuovo pulsante nella ROM personalizzate, o fermata vigore a partire dal menu App nel vostro sistema operativo) , l'app viene semplicemente rimossa dalla memoria, nessun codice viene inserito!

ciò che di solito viene fatto in questo caso rilancia automaticamente il servizio dopo che è stato arrestato controllo questo answer, e, come si può leggere:

è davvero molto male modello per eseguire il servizio con forza contro la disponibilità dell'utente .

ci sono tante Cordova plugin per creare BroadcasteReceiver, tuttavia la semplice risposta alla tua domanda, se l'applicazione viene ucciso, non è possibile ricevere la notifica.

Ma si dovrebbe prendere in considerazione questo: se l'utente uccide la vostra applicazione, significa che è stato fatto intenzionalmente, in modo da non dovreste davvero preoccupatevi se la vostra applicazione funzionerà o meno, in quanto questo è un problema per l'utente, e non la vostra come sviluppatore.

+0

innanzitutto grazie per la tua risposta. So che è un cattivo schema ma come sai è un'app di ibeacon, quindi qual è il significato dell'uso dei beacon se non riesco a inviare un benvenuto e alcune notifiche della campagna anche se gli utenti telefonano è nel suo pacchetto. ora sto lavorando alla creazione del mio servizio non appena ho trovato la soluzione che condividerò. – semirturgay

+0

@semirturgay è felice di aiutarti, ma non si tratta di creare il tuo servizio o no, dato che il servizio può essere ucciso esattamente come uccidere l'app, e se l'utente uccide il tuo servizio? – ProllyGeek

+0

@ProllyGeek Non sono d'accordo. Che dire delle notifiche push? Sono progettati per inviare notifiche agli utenti anche se l'app è chiusa (= non è in esecuzione in background). Le notifiche locali possono essere eseguite anche se sono state pianificate, anche se l'app viene uccisa. Lo stesso dovrebbe essere possibile per ascoltare i segnali di ibeacon. Se un utente non desidera ricevere un avviso quando si trova nell'intervallo, deve revocare l'autorizzazione di notifica dell'app. – binoculars

Problemi correlati