iOS 배경 위치 업데이트 정지하는 이유: 앱 일시정지, 배경 모드, 권한, 자동 일시정지, 정확도 및 각 문제 해결 방법

iOS 백그라운드 위치 업데이트 중단 이유

iOS 백그라운드 위치 업데이트 중단 이유: Capacitor 앱의 중단, 백그라운드 모드, 인증, 자동 일시정지, 정확도 및 각 원인에 대한 해결책.

iOS 백그라운드 위치 업데이트 중단

iOS는 앱을 중단하여 백그라운드 위치 업데이트 중단을 중단합니다. Core Location이 실패하는 것은 아닙니다. 앱이 위치 백그라운드 모드를 선언하고, 백그라운드 업데이트 활성화 및 앱이 여전히 전면에서 실행 중일 때 시작하지 않으면, iOS는 사용자가 떠난 후 몇 초 후 프로세스를 동결하고, 수정을 큐에 넣거나 버립니다. 이 안내서에는 __CAPGO_KEEP_0__ 앱에서 보이는 모든 원인에 대한 해결책과 각 원인에 대한 처리 방법이 나와 있습니다. CLLocationManageriOS는 앱을 중단하여 백그라운드 위치 업데이트 중단을 중단합니다. Core Location이 실패하는 것은 아닙니다. 앱이 위치 백그라운드 모드를 선언하고, 백그라운드 업데이트 활성화 및 앱이 여전히 전면에서 실행 중일 때 시작하지 않으면, iOS는 사용자가 떠난 후 몇 초 후 프로세스를 동결하고, 수정을 큐에 넣거나 버립니다. 이 안내서에는 Capacitor 앱에서 보이는 모든 원인에 대한 해결책과 각 원인에 대한 처리 방법이 나와 있습니다. @capgo/background-geolocation iOS는 앱을 중단하여 백그라운드 위치 업데이트 중단을 중단합니다. Core Location이 실패하는 것은 아닙니다. 앱이 위치 백그라운드 모드를 선언하고, 백그라운드 업데이트 활성화 및 앱이 여전히 전면에서 실행 중일 때 시작하지 않으면, iOS는 사용자가 떠난 후 몇 초 후 프로세스를 동결하고, 수정을 큐에 넣거나 버립니다. 이 안내서에는 __CAPGO_KEEP_0__ 앱에서 보이는 모든 원인에 대한 해결책과 각 원인에 대한 처리 방법이 나와 있습니다.

iOS 앱이 백그라운드 상태일 때 iOS는 어떻게 처리하는가

iOS는 사용자가 홈 화면을 스와이프하거나 휴대폰을 잠그면 앱에 짧은 시간을 주고 나서 앱을 중단합니다. 중단된 앱은 CPU 시간을 받지 못합니다. Capacitor 앱의 경우 네이티브 쪽과 WebView가 모두 중단되므로 JavaScript 콜백이 중단됩니다.

애플은 앱이 위치를 활성화하고 배경 위치 모드가 설정된 경우, iOS는 앱을 계속 실행하고 위치 업데이트를 계속 전달합니다. 이 문서는 이 계약을 충족하는 방법과 시스템이 의도적으로 이를 깨트리는 경우에 대한 내용입니다.

원인 1: 위치 배경 모드가 누락됨

Without location in UIBackgroundModes, 아무 양의 code도 업데이트 흐름을 유지하지 못합니다. code을 추가하십시오. ios/App/App/Info.plist:

<key>UIBackgroundModes</key>
<array>
  <string>location</string>
</array>

__CAPGO_KEEP_0__를 추가하더라도 업데이트가 흐르지 않습니다. Xcode의 Signing &amp; Capabilities, Background Modes, Location updates에서 활성화하거나, plist 키로도 설정할 수 있습니다. 이 키는 권한이 아닌 plist 키이므로 프로비저닝 프로파일 변경이 필요하지 않습니다.

네이티브 속성은 allowsBackgroundLocationUpdates입니다. 이 속성을 true 으로 설정하면 plist에서 배경 모드가 없으면 앱이 중단됩니다. Capgo 플러그인은 backgroundMessage to start(), 그러므로 plist 키는 배포 전에 반드시 존재해야 합니다.

앱 리뷰에서는 배경 모드를 정당화해야 합니다. 리뷰 노트에 사용하는 기능을 설명하고, 리뷰어에게 기능이 보이도록 하세요.

2. 원인: 배경 업데이트가 시작된 경우

애플의 규칙: 배경 업데이트는 앱이 전면에서 실행 중일 때 시작된 경우 계속됩니다. silent push, 배경 fetch 또는 task를 통해 세션을 시작하는 것은 표준 위치 업데이트에 대해 작동하지 않습니다. BGTaskScheduler 사용자 동작 또는 앱이 재개될 때 위치 추적을 시작하세요:

3. 원인:

import { App } from '@capacitor/app';
import { BackgroundGeolocation } from '@capgo/background-geolocation';

let tracking = false;

export async function startTracking() {
  if (tracking) return;
  tracking = true;
  await BackgroundGeolocation.start(
    {
      backgroundMessage: 'Recording your route',
      backgroundTitle: 'Route recording',
      requestPermissions: true,
      distanceFilter: 10,
      url: 'https://api.example.com/v1/points',
    },
    (location, error) => {
      if (error) return console.error(error);
      if (location) console.log(location.latitude, location.longitude);
    },
  );
}

// Re-arm when the user comes back, if the session should be active
App.addListener('appStateChange', ({ isActive }) => {
  if (isActive && shouldBeTracking()) startTracking();
});

declare function shouldBeTracking(): boolean;

3번째 이유: backgroundMessage 이 undefined이면, 플러그인은 위치 관리자를 전면 사용 전용으로 구성합니다:

이것은 Capgo 플러그인과 가장 일반적인 버그 보고서와 관련이 있습니다. backgroundMessage 이 플러그인은 Android에서 전면 서비스 알림의 텍스트로 사용됩니다. allowsBackgroundLocationUpdates stays false 이 플러그인은 Android에서 전면 서비스 알림의 텍스트로 사용됩니다.

4가지 이유 중 하나: 권한 수준이 잘못되거나, Allow Once

많은 개발자들은 Always를 사용하여 백그라운드에서 위치 추적을 해야 한다고 생각합니다. 그러나 그렇게 할 필요는 없습니다. Apple은 When In Use 권한을 가진 앱이 활성 위치 서비스를 유지하는 동안 백그라운드 업데이트가 활성화된 경우 백그라운드에서 계속 실행되며, 이 경우 Always가 중요합니다.

Always는 다른 일에 중요합니다: 종료된 앱을 다시 시작하는 경우. Only region monitoring, significant-change location 및 visits만이 Always를 사용하여 앱을 다시 시작할 수 있으며, Only region monitoring, significant-change location 및 visits만이 Always를 사용하여 앱을 다시 시작할 수 있습니다.

사용자 선택이 두 가지가 백그라운드 추적을 깨트립니다:

  • Allow Once. 이 앱은 사용하지 않을 때 위치 업데이트를 중단하는 iOS의 이유에 대해 설명합니다. (Translation note: The original text is a short UI label, so the translated text is kept within ±3 words of the source.)
  • 사용 중일 때 항상 알림을 표시하지 않습니다. iOS에서 백그라운드 위치 업데이트 요청 시 항상 항상 iOS는 앱이 화면에 표시되지 않을 때 업그레이드 프롬프트를 나중에 보여줄 수 있습니다.

세션을 시작하기 전에 실제 상태를 확인하세요:

import { BackgroundGeolocation } from '@capgo/background-geolocation';

const status = await BackgroundGeolocation.checkPermissions();

if (status.location !== 'granted') {
  await BackgroundGeolocation.requestPermissions({ permissions: ['location'] });
}

if (status.backgroundLocation === 'when_in_use') {
  // Background tracking still works for standard updates.
  // Explain why Always helps if you also rely on geofences.
}

iOS에서 backgroundLocation returns when_in_use or granted / always이러한 설명을 보여주기 위해 올바른 설명을 보여주기 위해.

5. 원인: Core Location이 자동으로 업데이트 중지.

CLLocationManager.pausesLocationUpdatesAutomatically 기본값으로 true. iOS가 사용자가 움직이지 않는다고 판단하면 배터리 절약을 위해 업데이트 중지를 합니다. 사용자가 앱을 다시 시작할 때까지 위치 접근이 중단되며, Core Location은 자동으로 다시 시작되지 않습니다.

Capgo 플러그인이 pausesLocationUpdatesAutomatically = false native code에서 설정합니다. 따라서 이 경우는 처리됩니다. 자체적으로 native code을 작성하거나 다른 플러그인을 사용하는 경우, 이 속성을 먼저 확인하세요.

6. 원인: 장치가 정지 상태이고 필터 크기가 큽니다.

50m의 distanceFilter 50m의 거리 필터를 사용하면 데스크 위에 있는 전화기는 업데이트가 없습니다. 로그에서 '추적 중지'로 보이지만, 이는 정상 동작입니다.

  • 정지 상태에서 하트비트가 필요하다면, 작은 또는 0의 distanceFilter.
  • Use minIntervalMs native POST를 보내는 빈도수를 제한하기 위해 대신 거리 필터를 사용하지 않습니다.
await BackgroundGeolocation.start(
  {
    backgroundMessage: 'Vehicle tracking active',
    distanceFilter: 0,
    minIntervalMs: 120_000, // at most one native POST every 2 minutes
    url: 'https://api.example.com/v1/vehicle-points',
  },
  () => {},
);

7. Precise Location이 꺼져 있습니다.

iOS 14 이후로 사용자는 앱에 대한 Precise Location을 끌 수 있습니다. 앱이 업데이트를 받지만, 그들은 대략적인 위치 (수십 km)이고, 매우 적게 도착합니다. 데이터 (대형)에서 이를 감지하고 사용자에게 Precise Location이 특정 기능에 중요한 이유를 설명하세요. 배송 또는 피트니스 앱을 배포하는 경우, 이에 대한 정보를 온보딩 시에 제공하세요, 아니라 사용자가 불량한 여행 후에. accuracy 8. 사용자가 앱을 종료했습니다.

사용자가 앱을 종료했습니다.

선택 항목:

Options:

  • 중요한 장소에 항상 권한을 부여하는 geofence를 추가하여 iOS가 배경에서 앱을 다시 시작할 수 있도록 합니다.
  • 서버가 세션 중지점을 받지 못할 때 사용자에게 푸시 알림을 보내세요. 사용자가 앱을 다시 열도록 유도하세요.
  • 9. 자바스크립트가 실행되지 않지만 네이티브가 실행됩니다.

JavaScript는 native가 실행되고 있지만 실행되지 않는다.

A subtle one. Native code can receive a location while the WebView is suspended, or while it is still alive but not processing timers or network calls quickly. If you send points with fetch 사용자에게 세션 중에 강제 종료하지 말라고 알려주세요. 대부분의 fleet 앱은 온보딩 시에 이에 대한 정보를 제공합니다.

iOS의 배경 위치 업데이트 정지 이유 url 옵션입니다. 각 점은 원래의 JSON과 동일한 JSON으로 native code에서 POST됩니다. Location type + "source": "native"배경 작업을 넘어서 위치 이외의 작업에 대해 읽으십시오.

배경 작업이 __CAPGO_KEEP_0__에서 어떻게 작동하는지 백그라운드 작업은 Capacitor에서 어떻게 작동하는가 그리고 확인하세요 @capgo/capacitor-background-task.

Low Power 모드 및 열 상태

blue indicator

When In Use 권한을 가진 앱이 배경에서 위치를 사용할 때, iOS는 상태栏에 blue pill을 표시합니다. __CAPGO_KEEP_0__ 플러그인은

When an app with When In Use authorization uses location in the background, iOS shows a blue pill in the status bar. The Capgo plugin sets showsBackgroundLocationIndicator to true 배경 세션에서, 사용자가 기대하고 리뷰어들이 찾는 것을 숨기지 마십시오. 사용자는 그것을 믿습니다.

이러한 버그를 잡는 테스트 계획

배경 위치를 테스트하기에는 시뮬레이터만으로 충분하지 않습니다. 실제 아이폰을 사용하여:

  1. 배경 위치 테스트를 위해 릴리스 구성으로 빌드하십시오. 디버그 빌드에 Xcode가 연결된 경우 생명주기 처리가 다릅니다.
  2. 전면 세션을 시작하고 전화기를 잠그고 20분 동안walk 또는 drive합니다.
  3. “한 번 허용”과 “정확한 위치”를 끄고 “저전력 모드”를 켜고 반복합니다.
  4. 서버 로그를 확인하십시오. source: "native" 점을 확인하십시오.
  5. 세션 중 강제 종료하고 다음 런칭 시 앱이 무슨 일이 일어났는지 설명하는지 확인하십시오.

디바이스 UDID가 필요하다면 ad hoc 빌드에 대해 iOS UDID 찾기 Safari에서 가져옵니다. 빌드에 Xcode 26이 필요하다면 Mac이 없다면 Capgo 빌드 클라우드에서 서명된 iOS 빌드를 생성할 수 있습니다.

문제 해결 체크리스트

증상 가능한 원인 해결
잠금 후 몇 초 후에 멈춤 아니오 location 배경 모드가 없거나 backgroundMessage 배경 모드 키를 추가하고 전달하세요 backgroundMessage
시작 시 충돌 allowsBackgroundLocationUpdates 배경 모드 없이 추가 UIBackgroundModes → location
일회성으로 작동 후 중단 사용자가 일회 허용 설명하고 다시 묻거나 전송 openSettings()
차량이 주차된 후 중단 큰 distanceFilter 낮추고 사용 minIntervalMs
점이 멀리 떨어져 있는 경우, 정확도가 낮다 정확한 위치를 끄세요 사용자에게 활성화하도록 요청하세요
스와이프로 중단 사용자가 앱을 종료 iOS에서 예상되는 경우, 재시작을 위해 지오펜스(Geofence)를 사용하세요.
Native는 점수를 얻습니다. 서버는 그렇지 않습니다. JavaScript fetch 콜백(callback)에서 사용하세요. url option

배송 고정(fixes)

이러한 대부분의 고정은 native 구성 또는 native 구성에 영향을 주므로 새로운 App Store 빌드가 필요합니다. JavaScript 부분, 예를 들어 권한 설명, 온보딩 복사본 및 다시 시도 로직은 기존 사용자에게 다음으로 배포할 수 있습니다. Info.plist __CAPGO_KEEP_0__ Live Update Capgo 실시간 업데이트 native 빌드가 출시되면.

플러그인 중 선택할 때, Transistorsoft와 무료 Capgo 플러그인 트레이드 오프를 다룹니다.

Capacitor 앱에 대한 즉시 업데이트

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

페이지/영역: Capgo 마케팅 웹사이트. 역할: 웹사이트 복사 문장. 메시지 키 `home_hero_human_support` (홈 히어로 인간 지원).

Capgo은 전문적인 모바일 앱을 만들기 위해 꼭 필요한 최고의 통찰력을 제공합니다.