2016-08-09 3 views
0

を入力して終了時間ビーコンでの待ち時間を減らすために: -どのように私が何をしたか

私はジンバルビーコンを使用して「角度JS +イオン+コルドバ」を用いたハイブリッドアプリケーションを作成しています。私のアプリケーションはうまくいきますが、ビーコンの入力と終了は、フォアグラウンドとバックグラウンドの両方で時間がかかりすぎます。 ?どのように私はこの問題を解決することができ、私は以下の私のコードスニペットを添付しています:

ステップ: -

  1. まず私はコルドバ

  2. 私のiOSデリゲートメソッドを使用して角度から代表者を呼び出しています呼ばれるが、長い遅延

didEnterRegion後に取得しから10秒

didExitRegion後に呼び出さ - 20〜30秒

後に呼ばれる私が設定したジンバル送信間隔(MS) - 100

マイスニペット: -

Angular-jsスニペット:

  // Request permission from user to access location info. 
      cordova.plugins.locationManager.requestAlwaysAuthorization(); 

      // Create delegate object that holds beacon callback functions. 
      var delegate = new cordova.plugins.locationManager.Delegate(); 
      console.log(delegate) 
      cordova.plugins.locationManager.setDelegate(delegate); 

      // Set delegate functions. 
      delegate.didDetermineStateForRegion = onDidDetermineStateForRegion; 
      delegate.didRangeBeaconsInRegion = onDidRangeBeaconsInRegion; 
      delegate.didEnterRegion = onDidRangeBeaconsInRegion 

のiOSは、スニペット: - 私たちは、特にdidExitRegionに関して、ネイティブiBeacon領域の機能と同様の動作を気づいた

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { 
[self.queue addOperationWithBlock:^{ 

     [self _handleCallSafely:^CDVPluginResult *(CDVInvokedUrlCommand *command) { 

      [[self getLogger] debugLog:@"didEnterRegion: %@", region.identifier]; 
      [[self getLogger] debugNotification:@"didEnterRegion: %@", region.identifier]; 

      NSMutableDictionary* dict = [NSMutableDictionary new]; 
      [dict setObject:[self jsCallbackNameForSelector:(_cmd)] forKey:@"eventType"]; 
      [dict setObject:[self mapOfRegion:region] forKey:@"region"]; 

      CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dict]; 
      [pluginResult setKeepCallbackAsBool:YES]; 
      return pluginResult; 

     } :nil :NO :self.delegateCallbackId]; 
    }]; 
} 


-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { 
[self.queue addOperationWithBlock:^{ 

     [self _handleCallSafely:^CDVPluginResult *(CDVInvokedUrlCommand *command) { 

      [[self getLogger] debugLog:@"didExitRegion: %@", region.identifier]; 
      [[self getLogger] debugNotification:@"didExitRegion: %@", region.identifier]; 

      NSMutableDictionary* dict = [NSMutableDictionary new]; 
      [dict setObject:[self jsCallbackNameForSelector:(_cmd)] forKey:@"eventType"]; 
      [dict setObject:[self mapOfRegion:region] forKey:@"region"]; 

      CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dict]; 
      [pluginResult setKeepCallbackAsBool:YES]; 
      return pluginResult; 

     } :nil :NO :self.delegateCallbackId]; 
    }]; 
} 

答えて

1

。この動作は、iOSのバージョンやアプリケーションの状態(フォアグラウンド/バックグラウンド)によって異なるようです。私は個人的にも、異なるデバイスと世代、つまりiPhone 6と従来のiPad miniとの違いに気付きました。これは遅延を引き起こすブロードキャストされたパケットの一部をスキップするようです。

どのiOSバージョンをお使いですか?あなたが言及した遅れは一貫していますか、近くのiBeaconsの時間が経つにつれて良くなっていますか?特に、古いバージョンのiOSでは、この種の動作(テストに基づく)が発生しやすくなっています。

我々は反応時間を改善する方法に関するいくつかの注意事項:

我々が及ぶ使用する当社独自の実装と「地域」を入力し、出シミュレートし、当社独自のジオフェンスの比較を、行うことを決めました。これは、ジオフェンス実装に関するいくつかの追加作業をもたらしますが、より良い結果をもたらすことは事実です。

明らかに、これはアプリが一時停止されていて、バックグラウンドでアクティブに実行されていないときには制限があります。 「位置情報」バックグラウンドモードでは、アプリケーションがバックグラウンドにいるときでも、アプリケーションが範囲指定するための簡単なウィンドウが提供されます。バックグラウンドモードはアップルによって大きく規制されているため、適切な付加価値の理由が必要です。

ネイティブのiBeacon領域を使用しているときに遅延を改善する方法がいくつかあるかもしれませんが、タイミングがアプリにとって重要な場合は全体的に、上記の代替ルートを試してみることをおすすめします。

開示:私はProximi.ioプロキシミティプラットフォームのために働いています

関連する問題