React Nativeで、位置追跡を行う小さなiOSアプリを作成し、ユーザーが選択したサーバーにlat / lngを定期的に送信します。ただし、これはアプリがフォアグラウンドにある場合にのみ機能します。ユーザーが他のアプリを使用しているときに、このタスクをバックグラウンドで実行するにはどうすればよいですか?
React Nativeで、位置追跡を行う小さなiOSアプリを作成し、ユーザーが選択したサーバーにlat / lngを定期的に送信します。ただし、これはアプリがフォアグラウンドにある場合にのみ機能します。ユーザーが他のアプリを使用しているときに、このタスクをバックグラウンドで実行するにはどうすればよいですか?
回答:
現在、残念ながら、いかなる種類のバックグラウンドタスクもサポートされていません。あなたが参照している機能は、バックグラウンドタイマーです。このようなタイマーは、React Nativeに対するこの製品の苦痛(機能要求)です。この機能に対する需要の増加を示すために、賛成票を投じることができます。
2016年12月編集:まだ本当の選択肢はありません。RN0.33以降のヘッドレスJSAPIを使用していますが、これはAndroid専用です。また、これがフォアグラウンドで実行されるとアプリがクラッシュするため、使用には注意が必要です。それを指摘してくれた@Fengに感謝します。
そして今、AndroidとiOSの両方のための単一のAPIであるreact-native-background-taskがあります。
React Nativeエコシステムは、過去数か月にわたって途方もないペースで動いており、バックグラウンドでコードを実行できないという問題に対処するために、いくつかのプラグインが登場しました。
https://github.com/transistorsoft/react-native-background-fetch-定期的に30秒間ウェイクアップして、任意のJSコードを実行します。ウェイクアップの間隔が15分以上になるため、高解像度のジオロケーションには適していません。
https://github.com/transistorsoft/react-native-background-geolocation-特にバックグラウンドでのジオロケーションを対象とした、この状況により適しています。
私はこれを使用していますが、機能しているようです:https://github.com/ocetnik/react-native-background-timer
定期的にイベントを発行します(アプリがバックグラウンドにある場合でも)。
setInterval関数とsetTimeout関数を使用できます。このAPIはreact-nativeのAPIと同じであり、既存のタイマーをバックグラウンドタイマーにすばやく置き換えるために使用できます。
import BackgroundTimer from 'react-native-background-timer';
// Start a timer that runs continuous after X milliseconds
const intervalId = BackgroundTimer.setInterval(() => {
// this will be executed every 200 ms
// even when app is the background
console.log('tic');
}, 200);
// Cancel the timer when you are done with it
BackgroundTimer.clearInterval(intervalId);
// Start a timer that runs once after X milliseconds
const timeoutId = BackgroundTimer.setTimeout(() => {
// this will be executed once after 10 seconds
// even when app is the background
console.log('tac');
}, 10000);
// Cancel the timeout if necessary
BackgroundTimer.clearTimeout(timeoutId);