Skip to Content

iOS SDK: സർവൈവിംഗ് സസ്പെൻഷൻ

ആപ്പിളിൻ്റെ CoreLocation ചട്ടക്കൂട് പശ്ചാത്തല ട്രാക്കിംഗിന് ശക്തമായ ടൂളുകൾ നൽകുന്നു, എന്നാൽ മെമ്മറിയും ബാറ്ററി ലൈഫും ലാഭിക്കുന്നതിന് ആപ്പുകൾ താൽക്കാലികമായി നിർത്തുന്നതിൽ iOS വളരെ ആക്രമണാത്മകമാണ്.

ആപ്പിളിൻ്റെ കർശനമായ പശ്ചാത്തല നിർവ്വഹണ നയങ്ങളുമായി ട്രേസ്‌ലെറ്റ് എങ്ങനെ ഇടപഴകുന്നുവെന്നും നിങ്ങളുടെ പ്രത്യേക സാഹചര്യത്തിനായി ഇത് എങ്ങനെ ക്രമീകരിക്കാമെന്നും ഈ പേജ് കൃത്യമായി വിശദീകരിക്കുന്നു.


അനുമതികളും Info.plist സജ്ജീകരണവും

ആപ്പിൾ കർശനമായ സ്വകാര്യത ആവശ്യകതകൾ നടപ്പിലാക്കുന്നു. Tracelet ഫലപ്രദമായി ഉപയോഗിക്കുന്നതിന്, നിങ്ങളുടെ ios/Runner/Info.plist-ൽ നിങ്ങൾക്ക് എന്തുകൊണ്ട് ചില അനുമതികൾ ആവശ്യമാണെന്ന് കൃത്യമായി പ്രഖ്യാപിക്കണം. ഈ സ്‌ട്രിംഗുകൾ നഷ്‌ടമായാലോ ഉപയോഗ കേസ് വ്യക്തമായി വിശദീകരിക്കുന്നില്ലെങ്കിലോ ആപ്പ് സ്റ്റോർ അവലോകന സമയത്ത് Apple നിങ്ങളുടെ ആപ്പ് നിരസിക്കും.

1. ആവശ്യമായ ഉപയോഗ വിവരണങ്ങൾ

നിങ്ങളുടെ Info.plist-ലേക്ക് ഇനിപ്പറയുന്ന കീകൾ ചേർക്കുക:

<!-- Required for basic tracking --> <key>NSLocationWhenInUseUsageDescription</key> <string>We need your location to track your route while the app is open.</string> <!-- Required for background tracking when the app is minimized or killed --> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>We need background location to record your route even when the app is closed.</string> <!-- Required for the smart motion-detection battery saving engine --> <key>NSMotionUsageDescription</key> <string>Motion detection allows battery-efficient tracking by pausing GPS when stationary.</string>

2. പശ്ചാത്തല മോഡുകൾ

ട്രാക്ക്‌ലെറ്റ് പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കുന്നതിന് (ആപ്പ് നശിപ്പിക്കപ്പെടുമ്പോൾ തലയില്ലാത്ത ഡാർട്ട് കോഡ് എക്‌സിക്യൂട്ട് ചെയ്യുക), നിങ്ങൾ Xcode-ൽ ശരിയായ പശ്ചാത്തല മോഡ് കഴിവുകൾ പ്രഖ്യാപിക്കണം.

പകരമായി, അവയെ നിങ്ങളുടെ Info.plist-ലേക്ക് നേരിട്ട് ചേർക്കുക:

<key>UIBackgroundModes</key> <array> <string>location</string> <string>fetch</string> <!-- Only add 'audio' if you are using 'preventSuspend: true' (See Scenario 1 below) --> </array>

3. ഓപ്ഷണൽ ഫീച്ചറുകൾ നീക്കം ചെയ്യുന്നു (ക്രാഷുകൾ ഇല്ല)

നിങ്ങളുടെ ക്ലയൻ്റിന് നിർദ്ദിഷ്ട ഫീച്ചറുകൾ ആവശ്യമില്ലെങ്കിൽ (ഉദാ., ചലനമോ പ്രവർത്തന തരങ്ങളോ ട്രാക്ക് ചെയ്യാൻ അവർ ആഗ്രഹിക്കുന്നില്ല), നിങ്ങളുടെ Info.plist-ൽ നിന്ന് അനുബന്ധ കീ നിങ്ങൾക്ക് സുരക്ഷിതമായി ഒഴിവാക്കാം. ട്രെയ്‌സ്‌ലെറ്റിൻ്റെ നേറ്റീവ് സ്വിഫ്റ്റ് കോഡ് സവിശേഷതകൾ അഭ്യർത്ഥിക്കുന്നതിന് മുമ്പ് പ്രധാന സാന്നിധ്യം സുരക്ഷിതമായി പരിശോധിക്കുന്നു.

ഫീച്ചർ കീInfo.plist ൽ നിന്ന് നീക്കം ചെയ്യുമ്പോൾ പ്രഭാവം
NSMotionUsageDescriptionസുരക്ഷിതം. ചലനത്തിനായി ലൊക്കേഷൻ മാറ്റങ്ങൾ പരിശോധിക്കുന്നതിലേക്ക് iOS നിശബ്ദമായി മടങ്ങും. CMMotionActivityManager അഭ്യർത്ഥിക്കില്ല, കൂടാതെ മോഷൻ അനുമതികൾക്കായി ഉപയോക്താവിനോട് ആവശ്യപ്പെടുകയുമില്ല.
UIBackgroundModes -> audioസുരക്ഷിതം. ഡാർട്ട് ഐസൊലേറ്റ് സസ്പെൻഷൻ തടയാൻ നിങ്ങളുടെ കോൺഫിഗറേഷൻ preventSuspend: true സജ്ജീകരിച്ചാൽ മാത്രം ആവശ്യമാണ്.
NSLocationAlwaysAndWhenInUseUsageDescriptionസുരക്ഷിതം. ആപ്പ് എപ്പോഴെങ്കിലും ഫോർഗ്രൗണ്ടിൽ (അല്ലെങ്കിൽ താൽക്കാലികമായി നീല ഗുളിക വഴി) ട്രാക്ക് ചെയ്യപ്പെടും. ട്രെയ്‌സ്‌ലെറ്റ് മാന്യമായ അപചയത്തെ ആന്തരികമായി കൈകാര്യം ചെയ്യുന്നു.

സാഹചര്യം 1: ഫിറ്റ്‌നസ് ആപ്പ് (ഉയർന്ന കൃത്യത, സസ്പെൻഡ് ഇല്ല)

പര്യവേക്ഷണം ചെയ്‌ത ആശയങ്ങൾ: പ്രവർത്തന തരങ്ങൾ, സസ്പെൻഷൻ, ഓഡിയോ വേക്ക്

പ്രശ്നം

നിങ്ങളുടെ ഉപയോക്താവ് ഒരു മാരത്തൺ ഓടുകയാണ്. അവർ നിങ്ങളുടെ ആപ്പ് തുറക്കുകയും ഓട്ടം ആരംഭിക്കുകയും അവരുടെ iPhone ലോക്ക് ചെയ്യുകയും ചെയ്യുന്നു. അഞ്ച് മിനിറ്റിനുശേഷം, ഒരു പശ്ചാത്തല ഐക്ലൗഡ് ബാക്കപ്പ് പ്രവർത്തിപ്പിക്കാൻ റാം ആവശ്യമാണെന്ന് iOS തീരുമാനിക്കുന്നു, അതിനാൽ ഇത് നിങ്ങളുടെ ആപ്പിൻ്റെ ഡാർട്ട് ഐസൊലേറ്റ് പൂർണ്ണമായും താൽക്കാലികമായി നിർത്തുന്നു. Tracelet-ൻ്റെ നേറ്റീവ് സ്വിഫ്റ്റ് കോഡ് GPS പോയിൻ്റുകൾ ശേഖരിക്കുന്നത് തുടരുന്നു, എന്നാൽ ഡാർട്ട് ഐസൊലേറ്റ് ഫ്രീസായതിനാൽ, നിങ്ങളുടെ Flutter UI, ഡിസ്റ്റൻസ് കൗണ്ടർ അപ്‌ഡേറ്റ് ചെയ്യുന്നത് നിർത്തുന്നു, കൂടാതെ നിങ്ങൾ ഡാർട്ടിൽ പ്രവർത്തിക്കുന്ന ഏതെങ്കിലും തത്സമയ ട്രാക്കിംഗ് വെബ് സോക്കറ്റുകൾ നശിപ്പിക്കപ്പെടും.

Tracelet ഇത് എങ്ങനെ പരിഹരിക്കുന്നു: സസ്പെൻഡ് തടയുക

സ്‌ക്രീൻ ഓഫായിരിക്കുമ്പോൾ ഫ്ലട്ടർ ഡാർട്ട് ഐസൊലേറ്റ് അനിശ്ചിതമായി പ്രവർത്തിക്കുന്നത് നിലനിർത്താൻ, ആപ്പ് മീഡിയ സജീവമായി പ്ലേ ചെയ്യുന്നുണ്ടെന്ന് നിങ്ങൾ iOS-നെ കബളിപ്പിക്കണം.

ios: tl.IosConfig( activityType: tl.LocationActivityType.fitness, // Optimizes GPS filtering for running preventSuspend: true, )

preventSuspend: true സജ്ജീകരിക്കുന്നത് ട്രാക്ക്ലെറ്റ് ഒരു ലൂപ്പിൽ അദൃശ്യവും നിശബ്ദവുമായ ഓഡിയോ ക്ലിപ്പ് പ്ലേ ചെയ്യാൻ കാരണമാകുന്നു. ഉപയോക്താവ് സംഗീതം കേൾക്കുന്നതായി iOS കരുതുന്നതിനാൽ, അത് ഒരിക്കലും ഡാർട്ട് ഐസൊലേറ്റ് താൽക്കാലികമായി നിർത്തില്ല.

ആപ്പ് സ്റ്റോർ അവലോകന കുറിപ്പ്: preventSuspend ഉപയോഗിക്കുന്നതിന് Xcode-ലെ audio പശ്ചാത്തല മോഡ് ശേഷി ആവശ്യമാണ്. ഒരു ന്യായമായ ഉപയോക്തൃ കാരണമില്ലാതെ (ഉദാ. വോയ്‌സ് സൂചകങ്ങൾ പ്ലേ ചെയ്യുന്ന ഫിറ്റ്‌നസ് ട്രാക്കർ അല്ലെങ്കിൽ ടേൺ-ബൈ-ടേൺ ദിശകൾ സംസാരിക്കുന്ന ഒരു നാവിഗേഷൻ ആപ്പ്) ആപ്പ് സജീവമാക്കാൻ നിങ്ങൾ പശ്ചാത്തല ഓഡിയോ പൂർണ്ണമായും ഉപയോഗിക്കുകയാണെങ്കിൽ Apple നിങ്ങളുടെ ആപ്പ് നിരസിക്കും. നിശബ്ദ ഫ്ലീറ്റ് ട്രാക്കിംഗിനായി ഇത് ഉപയോഗിക്കരുത്!

ഇത് പ്രവർത്തനക്ഷമമാക്കാൻ: Xcode-ൽ നിങ്ങളുടെ iOS പ്രോജക്റ്റ് തുറക്കുക, സൈനിംഗും കഴിവുകളും -> + കഴിവ് -> പശ്ചാത്തല മോഡുകൾ -> എന്നതിലേക്ക് പോകുക ഓഡിയോ, എയർപ്ലേ, ചിത്രത്തിലെ ചിത്രം എന്നിവ പരിശോധിക്കുക.


രംഗം 2: സോഷ്യൽ റഡാർ (കുറഞ്ഞ ശക്തി, പരുക്കൻ)

പര്യവേക്ഷണം ചെയ്‌ത ആശയങ്ങൾ: കാര്യമായ മാറ്റങ്ങൾ, അംഗീകാര നിലകൾ

പ്രശ്നം

ഒരു സുഹൃത്ത് സമീപത്തുള്ളപ്പോൾ ഉപയോക്താവിനെ അറിയിക്കുന്ന ഒരു സോഷ്യൽ നെറ്റ്‌വർക്കിംഗ് ആപ്പ് നിങ്ങൾ നിർമ്മിക്കുകയാണ്. നിങ്ങൾക്ക് ടേൺ-ബൈ-ടേൺ കൃത്യത ആവശ്യമില്ല; അവർ ഏത് അയൽപക്കത്താണ് ഉള്ളതെന്ന് നിങ്ങൾക്ക് ഏകദേശം അറിയേണ്ടതുണ്ട്. ഭയപ്പെടുത്തുന്ന “എല്ലായ്പ്പോഴും അനുവദിക്കുക” അനുമതി പ്രോംപ്റ്റ് കാണിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നില്ല, കാരണം ഉപയോക്താക്കൾ അത് നിരസിക്കും.

ട്രേസ്‌ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു: കാര്യമായ മാറ്റങ്ങൾ

ജിപിഎസ് ചിപ്പ് പവർ അപ്പ് ചെയ്യുന്നതിനുപകരം, ട്രെയ്‌സ്‌ലെറ്റിന് പൂർണ്ണമായും സെൽ-ടവർ ഹാൻഡ്ഓഫുകളെ ആശ്രയിക്കാനാകും.

ios: tl.IosConfig( useSignificantChangesOnly: true, locationAuthorizationRequest: tl.LocationAuthorizationRequest.whenInUse, disableLocationAuthorizationAlert: true, )
  1. കാര്യമായ മാറ്റങ്ങൾ മാത്രം: ഇത് പ്രവർത്തനക്ഷമമാക്കുന്നതിലൂടെ, ഉപകരണം തികച്ചും വ്യത്യസ്തമായ ഒരു സെൽ ടവറിലേക്ക് (സാധാരണയായി 500 മീറ്റർ മുതൽ നിരവധി കിലോമീറ്റർ വരെ) ചാടുമ്പോൾ മാത്രം ആപ്പ് ഉണർത്താൻ Tracelet iOS-നോട് പറയുന്നു. ബാറ്ററി ചോർച്ച പ്രായോഗികമായി പൂജ്യമാണ്.
  2. ഉപയോഗിക്കുമ്പോൾ അംഗീകാരം: നിങ്ങൾ “ഉപയോഗത്തിലായിരിക്കുമ്പോൾ” അനുമതി മാത്രമേ ചോദിക്കൂ. ട്രേസ്‌ലെറ്റ് ഇതിനെ മാനിക്കുന്നു കൂടാതെ “എല്ലായ്‌പ്പോഴും” പ്രവർത്തനക്ഷമമാക്കുന്നതിന് ക്രമീകരണങ്ങളിലേക്ക് പോകാൻ ഉപയോക്താവിനോട് പറയുന്ന നേറ്റീവ് ആപ്പിൾ പ്രോംപ്റ്റിനെ ട്രിഗർ ചെയ്യില്ല. (ഡാർട്ടിൽ നിന്ന് ഈ അനുമതി നിർദ്ദേശങ്ങൾ എങ്ങനെ ട്രിഗർ ചെയ്യാമെന്ന് മനസിലാക്കാൻ, Flutter SDK: Permissions പേജ് കാണുക)

സാഹചര്യം 3: നീല ലൊക്കേഷൻ ഇൻഡിക്കേറ്റർ (showsBackgroundLocationIndicator)

പര്യവേക്ഷണം ചെയ്‌ത ആശയങ്ങൾ: പശ്ചാത്തല ലൊക്കേഷൻ സൂചകം

ഈ പതാക യഥാർത്ഥത്തിൽ എന്താണ് ചെയ്യുന്നത്

showsBackgroundLocationIndicator നേരിട്ട് ആപ്പിളിലേക്ക് മാപ്പ് ചെയ്യുന്നു CLLocationManager.showsBackgroundLocationIndicator. പേര് എതിർ അവബോധജന്യമാണ് - ഇത് സൂചകം *കാണിക്കാനുള്ള ഓപ്റ്റ്-ഇൻ ആണ്, അത് മറയ്‌ക്കാനുള്ള സ്വിച്ചല്ല:

മൂല്യംഅർത്ഥം
trueആപ്പ് പശ്ചാത്തലത്തിൽ ലൊക്കേഷൻ ഉപയോഗിക്കുമ്പോൾ കാണിക്കുക നീല സ്റ്റാറ്റസ്-ബാർ ഗുളിക / ഡൈനാമിക് ഐലൻഡ് സൂചകം.
false (സ്ഥിരസ്ഥിതി)പശ്ചാത്തല ലൊക്കേഷൻ ഉപയോഗത്തിനുള്ള സൂചകം മറയ്‌ക്കാനുള്ള അഭ്യർത്ഥന.

പൊതുവായ തെറ്റിദ്ധാരണ: showsBackgroundLocationIndicator: true ക്രമീകരണം നീല ഇൻഡിക്കേറ്റർ ഓഫാക്കുന്നില്ല - അത് ഓൺ ആക്കുന്നു. അത് മറയ്ക്കുകയാണ് നിങ്ങളുടെ ലക്ഷ്യമെങ്കിൽ, അത് false (സ്ഥിരസ്ഥിതി) വിടുക. നിങ്ങൾക്ക് ഗുളിക ദൃശ്യമാകണമെങ്കിൽ* മാത്രമേ true സജ്ജീകരിക്കുന്നത് ഉപയോഗപ്രദമാകൂ (ഉദാ. “ഉപയോഗിക്കുമ്പോൾ” പശ്ചാത്തല ട്രാക്കിംഗ് തൃപ്തിപ്പെടുത്താൻ, ചുവടെ).

നിങ്ങൾക്ക് ഗുളിക ആവശ്യമുള്ളപ്പോൾ (“ഉപയോഗത്തിലായിരിക്കുമ്പോൾ” എന്നതിലെ താൽക്കാലിക പശ്ചാത്തല ട്രാക്കിംഗ്)

നിങ്ങൾക്ക് “ഉപയോഗത്തിലായിരിക്കുമ്പോൾ” അനുമതി മാത്രമേ ഉള്ളൂ, എന്നാൽ ഉപയോക്താവ് ഒരു ടാസ്‌ക് പൂർത്തിയാക്കുമ്പോൾ ട്രാക്കിംഗ് തുടരാൻ ആഗ്രഹിക്കുന്നു (ഉദാ. ഒരു റൈഡ് ഷെയർ പിക്കപ്പ്). ഐഒഎസ് ഇത് അനുവദിക്കുന്നത് സൂചകം ദൃശ്യമാണെങ്കിൽ മാത്രം, അതിനാൽ ട്രാക്കിംഗ് നടക്കുന്നുണ്ടെന്ന് ഉപയോക്താവിന് അറിയാം:

ios: tl.IosConfig( showsBackgroundLocationIndicator: true, )

ഇത് പ്രവർത്തനക്ഷമമാക്കാൻ: location പശ്ചാത്തല മോഡ് Xcode-ൽ ഓണായിരിക്കണം (സൈനിംഗും കഴിവുകളും → പശ്ചാത്തല മോഡുകൾ → ലൊക്കേഷൻ അപ്‌ഡേറ്റുകൾ).

എന്തുകൊണ്ട് false എപ്പോഴും അത് മറയ്ക്കുന്നില്ല

showsBackgroundLocationIndicator: false ഉപയോഗിച്ച് പോലും, ഈ സന്ദർഭങ്ങളിൽ iOS ഇൻഡിക്കേറ്റർ നിർബന്ധിതമാക്കുന്നു — ഫ്ലാഗിന് അവയെ മറികടക്കാൻ കഴിയില്ല:

  1. “ഉപയോഗിക്കുമ്പോൾ” അംഗീകാരം — പശ്ചാത്തല ലൊക്കേഷൻ എല്ലായ്പ്പോഴും സൂചകം കാണിക്കുന്നു. പൂർണ്ണ “എല്ലായ്പ്പോഴും” അംഗീകാരത്തിന് മാത്രമേ അത് അടിച്ചമർത്താൻ കഴിയൂ.
  2. useBackgroundActivitySession: true (iOS 17+) — CLBackgroundActivitySession സജീവമായിരിക്കുമ്പോൾ ആപ്പിളിന് ഇൻഡിക്കേറ്റർ ആവശ്യമാണ് (സാഹചര്യം 4).
  3. തത്സമയ പ്രവർത്തനങ്ങൾ സജീവമാണ് (രംഗം 5).
  4. ഏതെങ്കിലും തുടർച്ചയായ പശ്ചാത്തല ലൊക്കേഷൻ സെഷൻ — ആപ്പ് startUpdatingLocation നിർത്താതെ പ്രവർത്തിക്കുകയാണെങ്കിൽ, ഫ്ലാഗ് പരിഗണിക്കാതെ സൂചകം ഓണായിരിക്കും.

യഥാർത്ഥത്തിൽ ഇൻഡിക്കേറ്റർ മറയ്ക്കാൻ

  1. പൂർണ്ണ “എല്ലായ്‌പ്പോഴും” അംഗീകാരം നേടുക (ഉപയോക്താവ് പിന്നീട് “എല്ലായ്‌പ്പോഴും എന്നതിലേക്ക് മാറുക” എന്ന് സ്ഥിരീകരിക്കുന്നത് വരെ iOS ആദ്യം ഒരു താൽക്കാലിക “ഉപയോഗത്തിലായിരിക്കുമ്പോൾ” അനുവദിച്ചേക്കാം - അത് വരെ ഗുളിക ദൃശ്യമാകും).
  2. showsBackgroundLocationIndicator: false ആയി സൂക്ഷിക്കുക (ഇത് true എന്ന് സജ്ജീകരിക്കരുത്).
  3. അനാവശ്യമായ തുടർച്ചയായ പശ്ചാത്തല ലൊക്കേഷൻ ഒഴിവാക്കുക. ജിയോഫെൻസ്-മാത്രം മോഡ് നേറ്റീവ് റീജിയൻ മോണിറ്ററിംഗ് ഉപയോഗിക്കുന്നു (തുടർച്ചയായ ജിപിഎസ് ഇല്ല), അതിനാൽ ഇത് ഒരു സൂചകവും കാണിക്കുന്നില്ലstartGeofences() സ്റ്റാൻഡേർഡ് മോഡിൽ തുടർച്ചയായ അപ്‌ഡേറ്റുകൾ പ്രവർത്തിപ്പിക്കുന്നില്ല.

സാഹചര്യം 4: ഡൈനാമിക് ഐലൻഡ് ഇൻഡിക്കേറ്റർ (iOS 17+)

പര്യവേക്ഷണം ചെയ്‌ത ആശയങ്ങൾ: പശ്ചാത്തല പ്രവർത്തന സെഷൻ

പ്രശ്നം

ബ്ലൂ പിൽ ഇൻഡിക്കേറ്ററിൻ്റെ പ്രയോജനങ്ങൾ നിങ്ങൾക്ക് വേണം, എന്നാൽ ആധുനിക ഐഫോണുകളിലെ ഡൈനാമിക് ഐലൻഡുമായി കൂടുതൽ ആധുനികവും നേറ്റീവ് ഇൻ്റഗ്രേഷനും വേണം, കൂടാതെ OS നിങ്ങളുടെ പശ്ചാത്തല സെഷനെ നശിപ്പിക്കാനുള്ള സാധ്യത കുറയ്ക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നു.

ട്രേസ്‌ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു

Tracelet ആപ്പിളിൻ്റെ CLBackgroundActivitySession (iOS 17-ൽ അവതരിപ്പിച്ചു) മായി സംയോജിപ്പിക്കുന്നു. ഇത് ഒരു പ്രമുഖ ഡൈനാമിക് ഐലൻഡ് ഇൻഡിക്കേറ്റർ നൽകുകയും നിങ്ങളുടെ ആപ്പ് താൽക്കാലികമായി നിർത്തരുതെന്ന് പറഞ്ഞുകൊണ്ട് OS-ൽ ഒരു ഔപചാരിക സെഷൻ സൃഷ്ടിക്കുകയും ചെയ്യുന്നു.

ios: tl.IosConfig( useBackgroundActivitySession: true, )

ആപ്പ് സ്റ്റോർ അവലോകന ആവശ്യകതകൾ: നിങ്ങളുടെ ആപ്പിന് സ്ഥിരമായ പശ്ചാത്തല ലൊക്കേഷൻ ആവശ്യമായി വരുന്നത് എന്തുകൊണ്ടാണെന്നതിൻ്റെ വ്യക്തമായ വിശദീകരണം Apple-ന് ആവശ്യമാണ്. നിങ്ങൾ CLBackgroundActivitySession ഉപയോഗിക്കുകയാണെങ്കിൽ, മൂന്ന് സ്ഥലങ്ങളിൽ നിങ്ങൾ **** ന്യായീകരണം നൽകണം, അല്ലെങ്കിൽ നിങ്ങളുടെ ആപ്പ് നിരസിക്കപ്പെടും:

  1. ആപ്പ് സ്റ്റോർ കണക്റ്റ് അവലോകന കുറിപ്പുകൾ: പ്രവർത്തനത്തിലുള്ള സവിശേഷത കാണിക്കുന്ന ഒരു ഡെമോ വീഡിയോയിലേക്കുള്ള ലിങ്ക് സഹിതം ആപ്പിന് ഈ ഫീച്ചർ ആവശ്യമായി വരുന്നത് എന്നതിനെക്കുറിച്ച് നിരൂപകന് വ്യക്തമായ രേഖാമൂലമുള്ള വിശദീകരണം നിങ്ങൾ നൽകണം.
  2. ആപ്പ് സ്റ്റോർ വിവരണം: നിങ്ങളുടെ പൊതു ആപ്പ് വിവരണം ആപ്പ് പശ്ചാത്തല ലൊക്കേഷൻ ഉപയോഗിക്കുന്നുണ്ടെന്ന് വ്യക്തമായി പ്രസ്താവിച്ചിരിക്കണം (ഉദാ. “ആപ്പ് അടച്ചിരിക്കുമ്പോഴും നിങ്ങളുടെ റണ്ണുകൾ ട്രാക്ക് ചെയ്യാൻ ഈ ആപ്പ് പശ്ചാത്തല ലൊക്കേഷൻ ഉപയോഗിക്കുന്നു.”).
  3. ഇൻ-ആപ്പ് ഓൺബോർഡിംഗ്: ലൊക്കേഷൻ അനുമതികൾ അഭ്യർത്ഥിക്കുന്നതിന് മുമ്പ്, പശ്ചാത്തല ലൊക്കേഷൻ ആവശ്യമായിരിക്കുന്നത് എന്തുകൊണ്ടാണെന്ന് നിങ്ങളുടെ ആപ്പിൻ്റെ UI ഉപയോക്താവിന് വ്യക്തമായി വിശദീകരിക്കണം.

സാഹചര്യം 5: തത്സമയ പ്രവർത്തനങ്ങൾ (ലോക്ക് സ്‌ക്രീനും ഡൈനാമിക് ഐലൻഡ് യുഐയും)

പര്യവേക്ഷണം ചെയ്‌ത ആശയങ്ങൾ: ആക്‌റ്റിവിറ്റി കിറ്റ്, ലോക്ക് സ്‌ക്രീൻ വിജറ്റുകൾ, ഡൈനാമിക് ഐലൻഡ്

പ്രശ്നം

iOS 17+-ൽ പശ്ചാത്തലത്തിൽ ട്രാക്ക് ചെയ്യുമ്പോൾ, നിങ്ങൾക്ക് ലോക്ക് സ്‌ക്രീനിലും ഡൈനാമിക് ഐലൻഡിലും സമ്പന്നമായ ഒരു ഇൻഡിക്കേറ്റർ വേണം - അതിനാൽ ചെറിയ നീല ലൊക്കേഷൻ ഗുളികയ്ക്ക് പകരം ട്രാക്കിംഗ് സജീവമാണെന്ന് ഉപയോക്താവിന് എപ്പോഴും അറിയാം.

ട്രേസ്‌ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു

Tracelet ആപ്പിളിൻ്റെ ActivityKit-മായി സംയോജിപ്പിക്കുന്നു. നിങ്ങൾ ഒരു liveActivityConfig നൽകുകയും ഒരു വിജറ്റ് വിപുലീകരണം ചേർക്കുകയും ചെയ്താൽ, ട്രാക്കിംഗ് ആരംഭിക്കുമ്പോൾ Tracelet സ്വയമേവ ഒരു തത്സമയ പ്രവർത്തനം ആരംഭിക്കുകയും ട്രാക്കിംഗ് നിർത്തുമ്പോൾ അത് അവസാനിപ്പിക്കുകയും ചെയ്യുന്നു.

ട്രേസ്‌ലെറ്റിൻ്റെ സ്റ്റാൻഡേർഡ് പശ്ചാത്തല പൈപ്പ്‌ലൈനിൻ്റെ മുകളിലുള്ള ഒരു UI ലെയർ ആണ് ലൈവ് ആക്‌റ്റിവിറ്റി. നിശ്ചലമായിരിക്കുമ്പോൾ GPS താൽക്കാലികമായി നിർത്തുന്ന ചലനം കണ്ടെത്തൽ എഞ്ചിനിൽ നിന്നും ബാക്ക്ഗ്രൗണ്ട്-സെഷൻ ഇൻ്റഗ്രേഷൻ (സീനാരിയോ 4) - പ്രവർത്തന വിജറ്റിൽ നിന്നല്ല - ബാറ്ററി കാര്യക്ഷമത. ട്രാക്ക്‌ലെറ്റ് അല്ല രണ്ടാമത്തെ CLLocationUpdate.liveUpdates() സ്ട്രീം തുറക്കുന്നില്ല, അത് GPS വർക്ക് ഡ്യൂപ്ലിക്കേറ്റ് ചെയ്യും.

ios: tl.IosConfig( liveActivityConfig: tl.LiveActivityConfig( title: 'Ride in progress', body: 'Tracking your route to the destination...', ), )

ട്രാക്കുചെയ്യുമ്പോൾ തത്സമയ പ്രവർത്തനം പുതുക്കുന്നു (updateNotification())

ട്രാക്കിംഗ് ആരംഭിച്ചതിന് ശേഷം * തത്സമയ പ്രവർത്തനം കാണിക്കുന്നത് മാറ്റാൻ, setConfig() വഴി liveActivityConfig അപ്‌ഡേറ്റ് ചെയ്‌ത് Tracelet.updateNotification() എന്ന് വിളിക്കുക. v3.6.8 എന്നതിനാൽ, ട്രാക്കിംഗ് പൈപ്പ്‌ലൈൻ പുനരാരംഭിക്കാതെ ഇത് ഏറ്റവും പുതിയ കോൺഫിഗറിൽ നിന്ന് തത്സമയ പ്രവർത്തനം പുതുക്കുന്നുAndroid ഫോർഗ്രൗണ്ട്-സർവീസ് അറിയിപ്പ് പുതുക്കുന്നതിനുള്ള ക്രോസ്-പ്ലാറ്റ്‌ഫോം കൗണ്ടർപാർട്ട്

await Tracelet.setConfig( const tl.Config( ios: tl.IosConfig( liveActivityConfig: tl.LiveActivityConfig( title: 'Ride in progress', body: 'Arriving in 2 minutes', ), ), ), ); await Tracelet.updateNotification();
ℹ️

പ്രവർത്തിക്കുന്ന ഒരു പ്രവർത്തനത്തിൽ ശരീരം മാത്രമേ അപ്‌ഡേറ്റ് ചെയ്യപ്പെടുകയുള്ളൂ - title മാറ്റമില്ലാത്ത ActivityAttributes-ൽ ജീവിക്കുന്നു, പ്രവർത്തനം അവസാനിപ്പിക്കാതെയും വീണ്ടും അഭ്യർത്ഥിക്കാതെയും മാറ്റാൻ കഴിയില്ല (ഒരു ActivityKit പരിമിതി).

തത്സമയ പ്രവർത്തനം ചലിക്കുന്ന ഉപ-അവസ്ഥവുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു (നിശ്ചലമായി പോകുമ്പോൾ Tracelet GPS താൽക്കാലികമായി നിർത്തുമ്പോൾ അത് നിരസിക്കപ്പെടും), അതിനാൽ നിങ്ങൾ അത് പുതുക്കിയ നിമിഷത്തിൽ അത് സ്‌ക്രീനിൽ ഉണ്ടായേക്കില്ല. ഒരു ട്രാക്കിംഗ് സെഷൻ സജീവമായിരിക്കുമ്പോൾ, updateNotification() നിങ്ങൾക്കായി ഇത് കൈകാര്യം ചെയ്യുന്നു: ഇത് പ്രവർത്തിക്കുന്ന പ്രവർത്തനം അപ്‌ഡേറ്റ് ചെയ്യുന്നു, അല്ലെങ്കിൽ അത് ഡിസ്മിസ് ചെയ്‌താൽ ഏറ്റവും പുതിയ ഉള്ളടക്കം ഉപയോഗിച്ച് ** വീണ്ടും അവതരിപ്പിക്കുന്നു. liveActivityConfig സജ്ജീകരിക്കാതിരിക്കുകയോ ട്രാക്കിംഗ് നിർത്തുകയോ ചെയ്യുമ്പോൾ ഇത് സുരക്ഷിതമായ നോ-ഓപ്പാണ്.

Xcode വിജറ്റ് വിപുലീകരണ സജ്ജീകരണം (ആവശ്യമാണ്)

ഇത് എന്തിനുവേണ്ടിയാണ്? ട്രാക്കിംഗ് സജീവമായിരിക്കുമ്പോൾ, iOS ലോക്ക് സ്‌ക്രീനിലും ഡൈനാമിക് ഐലൻഡിലും ഒരു തത്സമയ പ്രവർത്തനം പ്രദർശിപ്പിക്കാൻ ഈ സജ്ജീകരണം നിങ്ങളുടെ ആപ്പിനെ അനുവദിക്കുന്നു. ഇത് ആപ്പ് തുറക്കാതെ തന്നെ ഉപയോക്താക്കൾക്ക് അവരുടെ നടന്നുകൊണ്ടിരിക്കുന്ന സെഷനെ കുറിച്ചുള്ള ഒറ്റനോട്ടത്തിൽ വിവരങ്ങൾ നൽകുന്നു.

ഇത് ബാറ്ററി ലാഭിക്കുമോ? ഇല്ല. തത്സമയ പ്രവർത്തനം പൂർണ്ണമായും ഒരു UI ലെയറാണ്, ബാറ്ററി ലാഭിക്കുന്നില്ല. ബാറ്ററി കാര്യക്ഷമത പൂർണ്ണമായും ട്രെയ്‌സ്‌ലെറ്റിൻ്റെ പ്രധാന പശ്ചാത്തല എഞ്ചിനിൽ നിന്നാണ് വരുന്നത് (മോഷൻ ഡിറ്റക്ഷൻ, സ്റ്റേഷണറി ആയിരിക്കുമ്പോൾ GPS താൽക്കാലികമായി നിർത്തൽ, പശ്ചാത്തല സെഷനുകൾ).

ഇത് നിർബന്ധമാണോ? ഇല്ല. ഈ സജ്ജീകരണം പൂർണ്ണമായും ഓപ്‌ഷണലാണ്. നിങ്ങൾ ഇത് ഒഴിവാക്കുകയാണെങ്കിൽ, Tracelet ഇപ്പോഴും പശ്ചാത്തലത്തിൽ കൃത്യമായി ട്രാക്ക് ചെയ്യും, എന്നാൽ ഉപയോക്താക്കൾക്ക് നിങ്ങളുടെ ഇഷ്‌ടാനുസൃത UI-ക്ക് പകരം സ്റ്റാൻഡേർഡ് സിസ്റ്റം സൂചകങ്ങൾ (നീല ലൊക്കേഷൻ ഗുളിക പോലെ) മാത്രമേ കാണാനാകൂ.

ആൻഡ്രോയിഡിൽ നിന്ന് വ്യത്യസ്തമായി, ഫ്ലട്ടർ പ്ലഗിന്നുകൾക്ക് ചലനാത്മകമായി iOS വിജറ്റുകൾ സൃഷ്ടിക്കാൻ കഴിയില്ല. തത്സമയ പ്രവർത്തനങ്ങൾ പ്രവർത്തനക്ഷമമാക്കാൻ, Xcode-ൽ നിങ്ങളുടെ iOS ആപ്പിലേക്ക് ഒരു വിജറ്റ് വിപുലീകരണം ടാർഗെറ്റ് ചേർക്കണം:

  1. Xcode-ൽ ios/Runner.xcworkspace തുറക്കുക.
  2. ഫയൽ -> പുതിയത് -> ടാർഗെറ്റ്… എന്നതിലേക്ക് പോയി വിജറ്റ് വിപുലീകരണം തിരഞ്ഞെടുക്കുക.
  3. TraceletWidget എന്ന് പേരിടുക. തത്സമയ പ്രവർത്തനം ഉൾപ്പെടുത്തുക പരിശോധിച്ചിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക.
  4. നിങ്ങളുടെ ആപ്പിൻ്റെ Info.plist, നിങ്ങളുടെ പുതിയ വിജറ്റ് എക്സ്റ്റൻഷൻ്റെ Info.plist എന്നിവയിൽ (എക്സ്കോഡ് -> ഓപ്പൺ ആയി -> സോഴ്സ് കോഡിൽ വലത് ക്ലിക്ക് ചെയ്യുക), പ്രധാന <dict>-നുള്ളിൽ നിങ്ങൾ ഇനിപ്പറയുന്ന കീ ചേർക്കണം:
<key>NSSupportsLiveActivities</key> <true/>
  1. വിപുലീകരണ പതിപ്പ് സമന്വയിപ്പിക്കുക (ആപ്പ് സ്റ്റോർ സമർപ്പിക്കുന്നതിന് മാത്രം പ്രാധാന്യമുണ്ട്): ഹോസ്റ്റ് ആപ്പുമായി CFBundleShortVersionString / CFBundleVersion പൊരുത്തപ്പെടാത്ത ഒരു ആപ്പ് എക്സ്റ്റൻഷൻ ആപ്പിൾ നിരസിക്കുന്നു. നിങ്ങളുടെ ആപ്പുമായി പൊരുത്തപ്പെടുന്നതിന് വിജറ്റ് ടാർഗറ്റിൻ്റെ പതിപ്പ്, ബിൽഡ് എന്നിവ സജ്ജീകരിക്കുക: ട്രേസ്‌ലെറ്റ് വിഡ്ജറ്റ് ടാർഗെറ്റ് → ജനറൽഐഡൻ്റിറ്റി തിരഞ്ഞെടുക്കുക, കൂടാതെ പതിപ്പ് നിങ്ങളുടെ ആപ്പിൻ്റെ പതിപ്പിലേക്ക് സജ്ജീകരിക്കുക, കൂടാതെ പതിപ്പ് നിങ്ങളുടെ ആപ്പിൻ്റെ ബിൽഡ് മൂല്യം (നിങ്ങളുടെ ആപ്പിൻ്റെ NTE 2 ൻ്റെ അതേ നമ്പറിലേക്ക്) നിർമ്മിക്കുക.

വിജറ്റിൻ്റെ Info.plist-ൽ $(FLUTTER_BUILD_NAME) / $(FLUTTER_BUILD_NUMBER) ഒട്ടിച്ച് ഇവ സജ്ജീകരിക്കാൻ അരുത് ശ്രമിക്കരുത്. ആ വേരിയബിളുകൾ റണ്ണർ ടാർഗെറ്റിനായി മാത്രം നിർവ്വചിച്ചിരിക്കുന്നു (Flutter’s Generated.xcconfig വഴി); വിജറ്റ് ടാർഗെറ്റിൽ അവർ ശൂന്യമാക്കാൻ തീരുമാനിക്കുന്നു, അതിനാൽ പതിപ്പുകൾ നിശബ്ദമായി പൊരുത്തപ്പെടുന്നില്ല. മുകളിൽ പറഞ്ഞതുപോലെ ടാർഗെറ്റിൻ്റെ ബിൽഡ് ക്രമീകരണങ്ങൾ (MARKETING_VERSION / CURRENT_PROJECT_VERSION) ഉപയോഗിക്കുക. ഇത് സമർപ്പിക്കൽ ആവശ്യകത മാത്രമാണ് - പൊരുത്തക്കേട് റൺടൈമിൽ ആപ്പിനെ ക്രാഷ് ചെയ്യില്ല.

  1. Flutter ഡിപൻഡൻസികൾ ലിങ്ക് ചെയ്യരുത്: FlutterGeneratedPluginSwiftPackage അല്ലെങ്കിൽ Flutter എഞ്ചിൻ നിങ്ങളുടെ വിജറ്റ് എക്സ്റ്റൻഷനിലേക്ക് ലിങ്ക് ചെയ്യരുത്. അങ്ങനെ ചെയ്യുന്നത് റിലീസ് മോഡിൽ ഒരു ലോഞ്ച്-ടൈം dyld ക്രാഷിന് (Library not loaded) കാരണമാകുന്നു, കാരണം ഫ്ലട്ടർ അതിൻ്റെ ഡൈനാമിക് എസ്പിഎം ചട്ടക്കൂടുകൾ ആപ്പ് എക്സ്റ്റൻഷനുകളിൽ ഉൾച്ചേർക്കുന്നില്ല.
  2. സ്വയമേവ സൃഷ്ടിച്ച TraceletWidgetLiveActivity.swift ഉള്ളടക്കം ഇനിപ്പറയുന്നവ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക. SDK ഇറക്കുമതി ചെയ്യുന്നതിനുപകരം ഞങ്ങൾ ഇവിടെ ** TraceletActivityAttributes സ്ട്രക്‌റ്റ് സ്വമേധയാ നിർവ്വചിക്കുന്നത് ശ്രദ്ധിക്കുക - ActivityKit സ്‌ട്രക്‌റ്റിൻ്റെ (യോഗ്യതയില്ലാത്ത) പേരും രൂപവും അനുസരിച്ച് പ്രവർത്തനവുമായി പൊരുത്തപ്പെടുന്നു, അതിനാൽ ഇത് നിങ്ങളുടെ വിജറ്റിനെ ഭാരം കുറഞ്ഞതാക്കുകയും വിപുലീകരണത്തിലേക്ക് SDK ലിങ്ക് ചെയ്യുന്നത് ഒഴിവാക്കുകയും ചെയ്യുന്നു:
import ActivityKit import WidgetKit import SwiftUI // Define the exact struct expected by Tracelet's native core public struct TraceletActivityAttributes: ActivityAttributes { public struct ContentState: Codable, Hashable { public var status: String public init(status: String) { self.status = status } } public var title: String public init(title: String) { self.title = title } } @main struct TraceletWidgetBundle: WidgetBundle { var body: some Widget { TraceletWidgetLiveActivity() } } struct TraceletWidgetLiveActivity: Widget { var body: some WidgetConfiguration { ActivityConfiguration(for: TraceletActivityAttributes.self) { context in // Lock Screen / banner UI — fully self-contained (no SDK import needed) HStack(spacing: 12) { Image(systemName: "location.fill").foregroundColor(.blue) VStack(alignment: .leading) { Text(context.attributes.title).font(.headline) Text(context.state.status).font(.subheadline).foregroundColor(.secondary) } Spacer() } .padding() } dynamicIsland: { context in DynamicIsland { DynamicIslandExpandedRegion(.leading) { Text("Tracking") } DynamicIslandExpandedRegion(.trailing) { Text("Live") } DynamicIslandExpandedRegion(.bottom) { Text(context.state.status) } } compactLeading: { Image(systemName: "location.fill").foregroundColor(.blue) } compactTrailing: { Text("Live") } minimal: { Image(systemName: "location.fill").foregroundColor(.blue) } } } }

ഈ SwiftUI കാഴ്‌ച പൂർണ്ണമായും ഇഷ്‌ടാനുസൃതമാക്കാൻ നിങ്ങളുടേതാണ് - ActivityConfiguration ബ്ലോക്കിനുള്ളിൽ നിങ്ങൾക്കിഷ്ടമുള്ള രീതിയിൽ ഇത് സ്‌റ്റൈൽ ചെയ്യുക, context.attributes.title, context.state.status എന്നിവയിൽ നിന്നുള്ള ഡാറ്റ മാപ്പുചെയ്യുക.

വിജറ്റ് വിപുലീകരണത്തിൻ്റെ വിന്യാസ ലക്ഷ്യം iOS 16.2-ലേക്ക് സജ്ജീകരിക്കുക. Xcode-ൻ്റെ “വിജറ്റ് വിപുലീകരണം” ടെംപ്ലേറ്റ് പലപ്പോഴും നിയന്ത്രണ വിജറ്റുകളും @main WidgetBundle-ൽ @available(iOS 18.0, *) വ്യാഖ്യാനവും ചേർക്കുന്നു. ആ വ്യാഖ്യാനം വിപുലീകരണത്തിൻ്റെ വിന്യാസ ലക്ഷ്യത്തേക്കാൾ ഉയർന്നതാണെങ്കിൽ, വിജറ്റ് ബണ്ടിൽ (അതിനാൽ നിങ്ങളുടെ തത്സമയ പ്രവർത്തനം) രജിസ്റ്റർ ചെയ്യുന്നതിൽ പരാജയപ്പെടുന്നു - സിസ്റ്റം Activity had no descriptor ലോഗ് ചെയ്യുന്നു - കൂടാതെ വിപുലീകരണം പഴയ OS പതിപ്പുകളിൽ തകരാറിലായേക്കാം. വിപുലീകരണത്തിൻ്റെ വിന്യാസ നിലയിൽ @main ബണ്ടിൽ ലഭ്യമാക്കുക, കൂടാതെ if #available(iOS 18.0, *)-ൽ ഏതെങ്കിലും iOS-18-മാത്രം വിജറ്റുകൾ (ഉദാ. നിയന്ത്രണ വിജറ്റുകൾ) പൊതിയുക.


സാഹചര്യം 6: അവസാനിപ്പിച്ച അവസ്ഥ (ആപ്പ് ഫോഴ്സ്-ക്വിറ്റ്)

ആശയങ്ങൾ പര്യവേക്ഷണം ചെയ്‌തു: ആപ്പ് ലൈഫ് സൈക്കിൾ, ഫോഴ്‌സ്-ക്വിറ്റ് vs OS സസ്പെൻഷൻ

പ്രശ്നം

നിങ്ങളുടെ ഉപയോക്താവ് ആപ്പ് സ്വിച്ചറിൽ നിന്ന് മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുകയും ആപ്പ് പൂർണ്ണമായും നിർബന്ധിതമായി ഉപേക്ഷിക്കുകയും ചെയ്യുന്നു. ട്രാക്ക്‌ലെറ്റ് അവരെ പശ്ചാത്തലത്തിൽ ട്രാക്ക് ചെയ്യുന്നത് തുടരുമെന്ന് നിങ്ങൾ പ്രതീക്ഷിക്കുന്നു, പക്ഷേ ലൊക്കേഷനുകൾ വരുന്നത് നിർത്തുന്നു.

ആപ്പിൾ ഇത് എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു

ആൻഡ്രോയിഡിൽ നിന്ന് വ്യത്യസ്തമായി, ഒരു ഫോർഗ്രൗണ്ട് സേവനത്തിന് പലപ്പോഴും സ്വൈപ്പ്-ടു-ഡിസ്മിസ് അതിജീവിക്കാൻ കഴിയും, iOS ഉപയോക്തൃ ഉദ്ദേശം കർശനമായി നടപ്പിലാക്കുന്നു.

[ആപ്പിളിൻ്റെ ഔദ്യോഗിക കോർലൊക്കേഷൻ ഡോക്യുമെൻ്റേഷൻ] പ്രകാരം (NOTRANSURL0):

“ഉപയോക്താവ് നിങ്ങളുടെ ആപ്പ് ഉപേക്ഷിക്കുകയാണെങ്കിൽ, പുതിയ ലൊക്കേഷൻ ഇവൻ്റുകൾ വരുമ്പോൾ സിസ്റ്റം അത് സ്വയമേവ സമാരംഭിക്കില്ല. ലൊക്കേഷൻ ഇവൻ്റുകൾ വിതരണം ചെയ്യുന്നത് സിസ്റ്റം പുനരാരംഭിക്കുന്നതിന് മുമ്പ് ഉപയോക്താവ് നിങ്ങളുടെ ആപ്പ് വ്യക്തമായി വീണ്ടും സമാരംഭിക്കേണ്ടതാണ്.”

ഒരു ഉപയോക്താവ് ആപ്പ് സ്വമേധയാ നിർബന്ധിതമായി ഉപേക്ഷിക്കുമ്പോൾ:

  1. സ്റ്റാൻഡേർഡ് ലൊക്കേഷൻ അപ്‌ഡേറ്റുകൾ: പൂർണ്ണമായും നിർത്തി.
  2. കാര്യമായ ലൊക്കേഷൻ മാറ്റങ്ങൾ (SLC): പൂർണ്ണമായും നിർത്തി.
  3. മേഖലാ നിരീക്ഷണം (ജിയോഫെൻസുകൾ): പൂർണ്ണമായും നിർത്തി.

ഇത് അവസാനിപ്പിച്ച അവസ്ഥത്ത് പ്രവർത്തിക്കുമോ?

  • OS ആപ്പ് അവസാനിപ്പിച്ചെങ്കിൽ (ഉദാ. പശ്ചാത്തലത്തിലെ മെമ്മറി മർദ്ദം കാരണം): അതെ. ഒരു ലൊക്കേഷൻ ഇവൻ്റ് സംഭവിക്കുമ്പോൾ (ഒരു കാര്യമായ മാറ്റം അല്ലെങ്കിൽ ജിയോഫെൻസ് ട്രിഗർ പോലെ) പശ്ചാത്തലത്തിൽ Apple നിങ്ങളുടെ ആപ്പ് സ്വയമേവ പുനരാരംഭിക്കും. ട്രേസ്‌ലെറ്റിൻ്റെ നേറ്റീവ് റസ്റ്റ് കോർ ഉണർന്ന് അത് തടസ്സമില്ലാതെ കൈകാര്യം ചെയ്യും.
  • ഉപയോക്താവ് നിർബന്ധിതമായി ആപ്പ് ഉപേക്ഷിക്കുകയാണെങ്കിൽ: ഇല്ല. ആപ്പ് വീണ്ടും തുറക്കാൻ ഉപയോക്താവ് ആപ്പ് ഐക്കണിൽ നേരിട്ട് ടാപ്പ് ചെയ്യുന്നത് വരെ ആപ്പ് നിർജ്ജീവമായിരിക്കും.

ട്രേസ്‌ലെറ്റ് ഇത് എങ്ങനെ പരിഹരിക്കുന്നു

Tracelet-ന് ആപ്പിളിൻ്റെ അടിസ്ഥാന OS നിയന്ത്രണങ്ങൾ മറികടക്കാൻ കഴിയില്ല. എന്നിരുന്നാലും, Tracelet ഇത് ഉറപ്പാക്കുന്നു:

  1. സമന്വയിപ്പിക്കാത്ത എല്ലാ ലൊക്കേഷനുകളും റസ്റ്റ് SQLite ഡാറ്റാബേസിൽ ആപ്പ് കൊല്ലപ്പെടുന്നതിന് മുമ്പ് സുരക്ഷിതമായി നിലനിൽക്കും.
  2. ഉപയോക്താവ് ആപ്പ് വീണ്ടും തുറന്നാലുടൻ, Tracelet തൽക്ഷണം ട്രാക്കിംഗ് പുനരാരംഭിക്കുകയും ഏതെങ്കിലും ഓഫ്‌ലൈൻ ഡാറ്റയും നഷ്ടപ്പെടുത്താതെ സമന്വയിപ്പിക്കുകയും ചെയ്യുന്നു.
Last updated on