2017-02-11 3 views
2

Я подумываю о разработке приложения на основе маяка на основе eddyston на ионной основе. Мне нужно убедиться, что я могу покрыть эту ситуацию:Android Eddystone call to api при вводе местоположения на фоне

1 У пользователя есть телефон в кармане и блокировка экрана.

2- Телефон попадает в диапазон маяков.

3- Поскольку у пользователя установлено мое приложение, он получает уведомление.

Давая случай, когда пользователь установил приложение, можно ли совершать вызов api после его входа в зону маяка без разблокировки телефона?

Если это возможно, любые предложения, чтобы звезды смотрели вокруг, как это сделать?

Извините за такой общий вопрос, я посмотрел всюду, если это возможно, прежде чем задавать вопрос. Извините, если это вопрос свалки и мой плохой английский.

ответ

3

Возможно, вы сможете использовать то, что вы описали с помощью собственного кода на Android, , вероятно, невозможно вызвать вызов API из JavaScript с помощью Ionic/Cordova.

Проблема в том, что Ionic и Cordova полагаются на Android WebView для размещения JavaScript, который будет называться веб-службой. WebView должен находиться внутри Activity, который представляет собой встроенную конструкцию Android, на которой размещен визуальный экран. Такой визуальный экран не может быть создан без его отображения, поэтому нет способа выполнить ваш код JavaScript, чтобы вызвать вызов API, если экран фактически не отображается пользователю.

Альтернативой было бы создание гибридного приложения, которое использует собственный компонент для обнаружения маяка и вызова API, а также для создания остальной части вашего приложения с использованием Ionic. Именно с этим решением я работал с другими разработчиками Ionic. Если вы идете по этому маршруту, я бы рекомендовал использовать Android Beacon Library, чтобы обнаружить радиомаяки Eddystone еще до запуска приложения, а затем запустить уведомление из своих собственных обратных вызовов при обнаружении маяковых сигналов, а затем сделать ваш вызов API.

Стоит отметить, что, хотя для этой библиотеки есть ионные привязки, они работают только тогда, когда приложение находится на переднем плане.

Вот как бы вы создали код, чтобы сделать вызов API, когда Eddystone Beacon обнаруживается с помощью этой библиотеки:

public class MyApplicationName extends Application implements BootstrapNotifier { 
    private static final String TAG = "MyApplicationName"; 
    private RegionBootstrap regionBootstrap; 

    @Override 
    public void onCreate() { 
    super.onCreate(); 
    BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this); 
    beaconManager.getBeaconParsers().add(new BeaconParser(). 
      setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); 

    // wake up the app when any beacon is seen (you can specify specific id filers in the parameters below) 
    Region region = new Region("match-any-eddystone", null, null, null); 
    regionBootstrap = new RegionBootstrap(this, region); 
    } 

    @Override 
    public void didDetermineStateForRegion(int arg0, Region arg1) { 
     // Don't care 
    } 

    @Override 
    public void didEnterRegion(Region arg0) { 
    Log.d(TAG, "Got a didEnterRegion call"); 

    // TODO: MAKE API CALL HERE 

    } 

    @Override 
    public void didExitRegion(Region arg0) { 
    // Don't care 
    }   
} 

Полное раскрытие: Я ведущий разработчик проекта Beacon библиотеки Android.

+0

Спасибо за ваш ответ. Просто, чтобы подтвердить, можно запустить вызов API без взаимодействия с пользователем? Если это так, то я продолжу гибридное приложение или даже просто родное –

+0

Да, это абсолютно возможно. См. Мой отредактированный ответ с примером кода. – davidgyoung

+0

Спасибо .. отличный ответ Я работаю над этим, наконец, решил пойти с родным приложением. –

Смежные вопросы