Flutter: Flutter๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์œ„ํ•œ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 05์›” 02์ผ  ยท  139์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: flutter/flutter

๊ณ ๊ฐ์€ Wi-Fi๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ฑ์ด ์—ด๋ ค ์žˆ์ง€ ์•Š์„ ๋•Œ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์™€ ๊ฐ™์€ ์ž‘์—…์„ ์œ„ํ•ด iOS์™€ Android ๋ชจ๋‘์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

@mpcomplete ๋Š” Android์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Flutter๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” Dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ iOS์—์„œ ๋ณ‘๋ ฌ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋˜๋Š” ๊ธฐํƒ€์˜ API ๊ฐœ๋ฐœ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ์—”์ง„ ์ง€์›์€ https://github.com/flutter/flutter/issues/6192์—์„œ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.

truckable wellbeing engine framework plugin new feature

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋น ๋ฅธ ์—…๋ฐ์ดํŠธ: iOS์šฉ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ๊ฒ€ํ† ๋ฅผ ์œ„ํ•ด ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค(PR flutter/engine#5539). ์ผ๋‹จ ๋„์ฐฉํ•˜๋ฉด ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–๋„๋ก Android ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ƒ˜ํ”Œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์›”๋ง์— ์™„๋ฃŒ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค .

๋ชจ๋“  139 ๋Œ“๊ธ€

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ Dart ๋˜๋Š” Java/Objective-C๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋Š” ๋งฅ๋ฝ์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง€ํ•˜์ฒ  ์ง€๋„/์ง€ํ•˜์ฒ ์„ ๋“ค๋ฝ๋‚ ๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„. ๊ทธ๋ž˜์„œ ๋ชฉํ‘œ๋Š” ์‹คํ–‰๋œ ์ฝ”๋“œ๊ฐ€ Dart๊ฐ€ ๋˜๋„๋ก ํ•˜์—ฌ ๊ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์กฐ์ž‘ ์ฝ”๋“œ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

CC @kasperl; ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ๋Œ€์ƒ์— ๊ฑธ์ณ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ํƒ๊ตฌํ–ˆ์œผ๋ฉฐ ์•„๋งˆ๋„ ๊ทธ๋กœ๋ถ€ํ„ฐ ๋ช‡ ๊ฐ€์ง€ ๊ตํ›ˆ์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋“ค์—ˆ๋˜ ์œ ์ผํ•œ ๊ฒƒ์€ "ํ‘ธ์‹œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์žฅ์น˜์—์„œ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์—ด๋ ค ์žˆ์ง€ ์•Š์•„๋„ ์žฅ์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ์ƒ๋‹นํžˆ ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์˜๊ฐ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด iOS ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

๋‚˜๋Š” ์ด๊ฒƒ์ด #6192์™€ ๊ฐ™์€ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

#6192์—์„œ ์žŽ์ด ๋งŽ์€ ํƒœ๊ทธ ๋ฐ ๋งˆ์ผ์Šคํ†ค ๊ฐ’ ์ถ”๊ฐ€

@mravn-google @sigurdm ์ƒ๊ฐํ•ด๋ณผ๋งŒํ•œ ๊ฒƒ!

ํƒ€๋‹น์„ฑ๊ณผ ๋น„์šฉ์„ ๋” ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐ ์กฐ์‚ฌ๋ฅผ ์œ„ํ•ด Mikkel์—๊ฒŒ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ Leafy์˜ ์—…๋ฐ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์•Œ๋ฆผ(์˜ˆ: ์•ฑ์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์‘๋‹ตํ•ด์•ผ ํ•˜๋Š” ์•Œ๋ฆผ)์˜ ์ œํ•œ์œผ๋กœ ์ธํ•ด Leafy๋Š” ๋””์Šคํ”Œ๋ ˆ์ด ์•Œ๋ฆผ(์˜ˆ: ์•ฑ ๊ฐœ์ž… ์—†์ด ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ์ง์ ‘ ํ‘ธ์‹œ๋˜๋Š” ์•Œ๋ฆผ)์„ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์œผ๋กœ ๊ธฐ์šธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ง€์›์€ ์ด๋ฏธ Flutter์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ํŒ€๊ณผ ๋Œ€ํ™”ํ•˜๋Š” ๋™์•ˆ ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ์›จ์–ด๋Ÿฌ๋ธ” ๋˜๋Š” [ํ™ˆ ํ™”๋ฉด] ์œ„์ ฏ์„ ์ง€์›ํ•˜๋ ค๋ฉด ์ด๋Ÿฌํ•œ ํ‘œ๋ฉด์ด Flutter์—์„œ ์•„์ง ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ UI๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”Œ๋Ÿฌํ„ฐ ์•ฑ๊ณผ ์›จ์–ด๋Ÿฌ๋ธ” ์•ฑ์—์„œ ๋ชจ๋ธ ๋ ˆ์ด์–ด์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก '์•ฑ์„ ๊นจ์šฐ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ'ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ž‘์„ฑํ•œ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ๊ธฐ๋ณธ ์•ฑ์ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์— ๋Œ€ํ•œ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฒ ๋ฅผ๋ฆฐ DroidCon์— ๋Œ€ํ•œ Flutter ๊ฐ•์—ฐ์˜ ์ €์ž์™€ ๋ฐฉ๊ธˆ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ทธ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ๋ฌป๋Š” ์งˆ๋ฌธ ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค. "์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•, Flutter ๋ฐฉ์‹"

๋ถ„๋ช…ํžˆ ํ•˜์ž๋ฉด, ํ˜„์žฌ Flutter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์˜ ์ผ๋ถ€๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค๋Š” Obj-C/Swift ๋˜๋Š” Java/Kotlin ์ฝ”๋“œ๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค์—์„œ Dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—”์ง„์˜ ์ œํ•œ ์‚ฌํ•ญ์„ ์ˆ˜์ •ํ•˜๊ณ  Dart์—์„œ ์ด๋Ÿฌํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(FlutterView๊ฐ€ ํ•„์š”ํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์†ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ). ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์ œํ•œ์ด ์ œ๊ฑฐ๋จ).

https://github.com/flutter/flutter/issues/6192#issuecomment -258928555์—์„œ ํ˜„์žฌ ์—”์ง„ ์ œํ•œ ์‚ฌํ•ญ๊ณผ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ์˜๋„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ @a-siva

์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 5์ดˆ๋งˆ๋‹ค ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋‹ค๋ฅธ ํŠน์ • ์ •๋ณด๊ฐ€ ์ฒจ๋ถ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ Dart์—์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ํ™œ๋™์„ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ์ง€์†์ ์ธ ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•˜๊ณ  5์ดˆ๋งˆ๋‹ค ํ•ด๋‹น Dart ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฐจ๋‹จ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์†ก์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹จ์ˆœํžˆ ํƒ€์ด๋จธ๋ฅผ ํ™œ์„ฑ ์ƒํƒœ๋กœ ๋‘๊ณ  ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ ์šฐ๋ฆฌ ์•ฑ์—๋Š” ์ผํšŒ์„ฑ ์บ์‹œ ์ •๋ฆฌ(์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ „ํ™˜๋œ ํ›„ 15๋ถ„)์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์œผ๋ฉฐ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์•ฑ์ด Dart์—์„œ ์ค‘์ง€๋˜๋Š” ๋™์•ˆ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ™์€:

<strong i="6">@override</strong>
void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.paused) {
        new Future.delayed(const Duration(seconds: 5), () => _doSomething());
    }
}

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์•ฑ์ด ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๋ช…์‹œ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ž‘์—… ์ „ํ™˜๊ธฐ์—์„œ).
  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ์•ฑ์ด OS์— ์˜ํ•ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • iOS์—์„œ? ์ €ํฌ๊ฐ€ ์‹œ๋„ํ•œ ์ ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ์–ธ์ œ๋“ ์ง€ ์‹œ๋„ํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๊ณ ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

iOS ๋Œ€์‘ ์ œํ’ˆ์€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ Android์—์„œ๋Š” ํฌ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ํ”Œ๋Ÿฌํ„ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ”„๋กœ์„ธ์Šค์— ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๋ฆฌ์†Œ์Šค ์š”๊ตฌ ์‹œ๊ฐ„ ๋™์•ˆ ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” ๋‹คํŠธ ํƒ€์ด๋จธ์— ๋” ๋‚˜์€ ์ƒ์กด ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ• ๊นŒ์š”?

์˜ˆ, ํ™œ๋™(๋”ฐ๋ผ์„œ ํ”Œ๋Ÿฌํ„ฐ ๋ณด๊ธฐ)์ด ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์šฐ๋ฆฌ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ•  ๋งŒํผ ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ •๋ณด์˜ ์ฃผ๊ธฐ์ ์ธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํด๋ง์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์š”์ ์ด๋ผ๋ฉด ์ด๋ฅผ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dart์—์„œ ํƒ€์ด๋จธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€์‹  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ์—์„œ ํƒ€์ด๋จธ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ์„ Dart์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Android์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜๋Š”

KeepAliveโ„ข Flutter ์•ฑ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

iOS์—์„œ๋Š” Info.plist ์— UIBackgroundMode ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์•ฑ์ด ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์„ ํ›จ์”ฌ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Android์—์„œ๋Š” ๋นˆ ์„œ๋น„์Šค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ AndroidManifest.xml ๋ณ€๊ฒฝ + ์‚ฌ์†Œํ•œ ์„œ๋น„์Šค ํด๋ž˜์Šค ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜ KeepAlive ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹iOS์—์„œ ์ˆ˜๋™ ์„ค์ •์ด ํ•„์š”ํ•˜๊ณ  Android์—์„œ ํฌ๊ทธ๋ผ์šด๋“œ/๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(ํฌ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋Š” ์ฃฝ์ด๊ธฐ ์–ด๋ ต์ง€๋งŒ ์ง€์†์ ์ธ ์•Œ๋ฆผ์ด ํ•„์š”ํ•จ).

ํฌ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ OS๋Š” ์–ด๋–ค ์ด์œ ๋กœ๋“  ์—ฌ์ „ํžˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒ์ ์ธ ์†”๋ฃจ์…˜์€ Android์˜ ์•Œ๋žŒ ๊ด€๋ฆฌ์ž๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š๋”๋ผ๋„ ํŠน์ • ์‹œ๊ฐ„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋กœ๊ทธ์ธํ•œ Firebase ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋™์ผํ•œ ์ƒํƒœ๋กœ Dart ํ”„๋กœ์„ธ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์žฌ๋ถ€ํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@pauldemarco ๋”ฐ๋ผ์„œ ์ด ๋ฒ„๊ทธ๋Š”... FlutterView๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์ƒํƒœ์—์„œ Flutter๊ฐ€ Dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์•Œ๋žŒ ๊ด€๋ฆฌ์ž, ์›จ์–ด๋Ÿฌ๋ธ”/๋„ค์ดํ‹ฐ๋ธŒ ์œ„์ ฏ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋˜๋Š” ํ‘ธ์‹œ ์•Œ๋ฆผ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค(๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” https://github.com/flutter/flutter/issues/6192์—์„œ ์„œ์„œํžˆ ์‚ฌ๋ผ์ง€๊ณ  ์žˆ์ง€๋งŒ).

_๋™์ผํ•œ ์ƒํƒœ_ ๋ฌธ์ œ๋Š” Flutter ์ˆ˜์ค€์ด ์•„๋‹Œ ์•ฑ ์ˆ˜์ค€์—์„œ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์•ฑ์˜ ๊ฒฝ์šฐ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ์œผ๋ฉด ๋‹ค๋ฅธ ๊ณณ์— ์ €์žฅํ•˜์ง€ ์•Š๋Š” ํ•œ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ: ๊ณต์œ  ํ™˜๊ฒฝ ์„ค์ • ๋˜๋Š” sqlite). ์•„๋งˆ๋„ Dart ์ฝ”๋“œ์—์„œ๋„ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Flutter๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€๋Š” iOS์—์„œ applicationWillTerminate , Android์—์„œ onSaveInstanceState ์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ด์— ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์งˆ๋ฌธ:

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์œ„ํ•œ iOS ๋ฐ Android ๋ชจ๋ธ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    • ์–ด๋–ค ์‹ ํ˜ธ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

    • ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๋‹ฌ๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด ์–ธ์ œ ์†Œ์ง„๋˜๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์••๋‹ˆ๊นŒ?

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์œ„ํ•ด ์›ํ•˜๋Š” ์‹คํ–‰ ๋ชจ๋ธ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? (์˜ˆ: ๋ณ„๋„์˜ ๊ฒฉ๋ฆฌ? ๋ฉ”์ธ dart:ui ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?)
  • ์•ฑ( runApp )์ด ์ฒ˜์Œ ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  • ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ํ‘œ์ค€ ๋ชฉ๋ก์„ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ ์ด๊ฒƒ์€ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๊ณ„ํš๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ ๊ณง ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋‹จ๊ธฐ ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์—์„œ ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜ฎ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€
๋‹ค์–‘ํ•œ ๊ฐ„๊ฒฉ(5์ดˆ, 10๋ถ„, 30๋ถ„, 6์‹œ๊ฐ„)์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ž‘๋™ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋กœ๊น… ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์‹ ํ˜ธ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Android์—์„œ ์ด๊ฒƒ์€ AlarmManager์˜ ์˜ˆ์•ฝ๋œ ์•Œ๋žŒ์—์„œ ์ „์†ก๋˜๋Š” PendingIntent๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
ํ˜„์žฌ๋กœ์„œ๋Š” ์ด์— ๋Œ€์‘ํ•˜๋Š” iOS๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๋‹ฌ๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด ์–ธ์ œ ์†Œ์ง„๋˜๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์••๋‹ˆ๊นŒ?

๋จผ์ € ์ด๋ฒคํŠธ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ด์•ผ ํ•˜๋ฉฐ ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ๋น„๋™๊ธฐ์‹(GPS ์œ„์น˜)์ธ ๋‹ค์Œ ์˜จ๋ผ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ(Firebase)์— ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ๋Œ€ 30์ดˆ ๋™์•ˆ ์ง€์†๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์œ„ํ•ด ์›ํ•˜๋Š” ์‹คํ–‰ ๋ชจ๋ธ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? (์˜ˆ: ๋ณ„๋„์˜ ๊ฒฉ๋ฆฌ? ๋ฉ”์ธ dart:ui ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?)

๋‚˜๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์—๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ’๋น„์‹ผ ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ฑ(runApp์—์„œ์™€ ๊ฐ™์ด)์ด ์ฒ˜์Œ ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์„œ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์•ฑ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํ•ญ๋ชฉ์„ ๋จผ์ € ์‹คํ–‰ํ•˜์—ฌ ์ถฉ๋Œ ๋ณด๊ณ  ๋“ฑ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์‚ฌ๋ก€๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์•ฑ์„ ์™„์„ฑํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š” ์œ ์ผํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•œ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ  iOS์—์„œ๋„ ์ด์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋” ์ƒˆ๋กญ๊ณ  ๋” ๋‚˜์€ ๋ฒ„์ „์„ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. iOS์˜ ๊ตฌ์„ฑ ์š”์†Œ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์ง€๋งŒ(์กฐ์‚ฌํ•  ๋•Œ iOS์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์ด Android๋ณด๋‹ค ํ›จ์”ฌ ์ œํ•œ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค) ์‚ฌ์šฉํ•œ Android ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์‹ ํ˜ธ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋Š” ๋˜ํ•œ AlarmManager์˜ ์•Œ๋žŒ์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ•ญ์ƒ ํ•ด๋‹น ์•Œ๋žŒ์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ด์ „ ์•Œ๋žŒ์ด ์ œ๊ฑฐ๋˜๋ฏ€๋กœ ์žฅ์น˜ ๋ถ€ํŒ… ๋ฐ ํŒจํ‚ค์ง€ ์—…๊ทธ๋ ˆ์ด๋“œ(android.intent.action.MY_PACKAGE_REPLACED) ์‹œ ์ผ๋ถ€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๋‹ฌ๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด ์–ธ์ œ ์†Œ์ง„๋˜๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์••๋‹ˆ๊นŒ?

์ด์ƒ์ ์œผ๋กœ๋Š” 1์ดˆ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค. ์†Œ๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์ด๋ฃจ์–ด์ง€๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ์œ ์ง€๋˜๋ฉฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์•Œ๋ฆผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์œ„ํ•ด ์›ํ•˜๋Š” ์‹คํ–‰ ๋ชจ๋ธ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? (์˜ˆ: ๋ณ„๋„์˜ ๊ฒฉ๋ฆฌ? ๋ฉ”์ธ dart:ui ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?)

๋‚˜์—๊ฒŒ๋„ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ฑ(runApp์—์„œ์™€ ๊ฐ™์ด)์ด ์ฒ˜์Œ ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ œ ๊ฒฝ์šฐ์—๋Š” ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ ๋ถ€ํŠธ ๋ฆฌ์‹œ๋ฒ„์™€ ๊ฐ™์€ ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์•ฑ์ด ์ด์ „์— ์‹œ์ž‘๋˜์ง€ ์•Š์•˜๋”๋ผ๋„ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/41924890/how-do-i-run-code-in-the-background-even-with-the-screen-off๋Š” ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ Flutter์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋ณธ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งํ•˜๋‹ค. :) ํ™•์‹คํžˆ ์ด ๊ณต๊ฐ„์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ๋งŽ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://github.com/flutter/flutter/issues/6192 ๋Š” FlutterView๊ฐ€ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์„ ๋•Œ ์‹ค์ œ๋กœ Dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์ง€์›์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ๋‹จ๊ธฐ ๋ ˆ์ด๋”์— ์žˆ์ง€๋งŒ ์ ์–ด๋„ ๋ช‡ ๋‹ฌ์€ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ์—์„œ @zanderso ๋ฅผ ํ• ๋‹น ํ•ด์ œํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋ฅผ ๊ธฐ๋ณธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๋ฒ„๊ทธ(#6192)์— ํ• ๋‹นํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

CC @kasperl; ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ๋Œ€์ƒ์— ๊ฑธ์ณ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ํƒ๊ตฌํ–ˆ์œผ๋ฉฐ ์•„๋งˆ๋„ ๊ทธ๋กœ๋ถ€ํ„ฐ ๋ช‡ ๊ฐ€์ง€ ๊ตํ›ˆ์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@mit-mit ๋ฐœ๊ฒฌํ•œ ๋‚ด์šฉ์„ ์–ด๋–ค ํ˜•ํƒœ๋‚˜ ํ˜•์‹์œผ๋กœ ๋ฌธ์„œํ™”ํ–ˆ์Šต๋‹ˆ๊นŒ?

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ์˜ค๋””์˜ค ์•ฑ์„ ์ƒ์„ฑํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์—ด์–ด ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋Š” ์ŠคํŠธ๋ฆผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์˜ค๋””์˜ค๋ฅผ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋์€ ์‹œ์ž‘/์ค‘์ง€/์ผ์‹œ ์ค‘์ง€/ff/๋˜๊ฐ๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋์€ UI๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค(์˜ˆ: ํƒ์ƒ‰ ๋ชจ์Œ ์˜ค๋””์˜ค ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ui๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ ๋‹ค์šด๋กœ๋“œ/์žฌ์ƒ์„ ๊ณ„์†ํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ UI๋ฅผ ๋– ๋‚  ๋•Œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ETA๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@zanderso ๋Š” ์—ฌ๊ธฐ์— ์—…๋ฐ์ดํŠธ๋œ ๋‚ด์šฉ์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/flutter/flutter/issues/6192#issuecomment -342214725

@a-siva๋Š” ์ด๊ฒƒ์ด ์•„์ง ์ง„ํ–‰ ์ค‘์ž„์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. Android๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ฉฐ ํ˜„์žฌ iOS์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์‹œ๊ฐ„(์˜ˆ: ์ด๋ฒคํŠธ ์ค‘)์— ํŠน์ • ์œ„์น˜์— ๊ฐ”๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‚ฌ์šฉ์ž ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜๋ ค๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@bjornbjorn ์ง€์˜คํŽœ์Šค ๋ชป์“ฐ๋‚˜์š”? IOS์— ๋น„์Šทํ•œ ๊ฒƒ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด Play ์„œ๋น„์Šค ์ง€์˜คํŽœ์‹ฑ ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Hixie ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ํ˜„์žฌ ๋‚ด ์•ฑ์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋‹จ๊ณ„์— ์žˆ์ง€๋งŒ(๋Œ€๋ถ€๋ถ„์˜ ์•ฑ์€ Go๋กœ ์ž‘์„ฑ๋จ) ๊ฒฐ๊ตญ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. Java ์ธก์—์„œ ํฌ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ตญ iOS์šฉ์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฝค ๋ถˆ์พŒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฃผ ๋˜๋Š” ๋‹ค์Œ ๋‹ฌ์— Android์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์˜ˆ์ƒํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :)

https://github.com/flutter/flutter/issues/6192 ์— ์ž์„ธํžˆ ์„ค๋ช…๋œ @rusenask , ์ด์ œ Android์—์„œ ์ด๋ฅผ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค! https://pub.dartlang.org/packages/android_alarm_manager ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

์œ ๋งํ•ด ๋ณด์ด๋ฉฐ ํ•ด๋‹น ์•Œ๋žŒ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "๋ฐ๋ชฌ" ์Šคํƒ€์ผ์—์„œ "์ฃผ๊ธฐ์ ์ธ ๋ฒ„์ŠคํŠธ"์™€ ๊ฐ™์€ ์•ฑ์œผ๋กœ ์•ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊นจ์–ด๋‚˜๋ ค๋ฉด ๋‰ด์Šค๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ์ข…๋ฃŒํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด์ƒ์ ์œผ๋กœ๋Š” ๋‚ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ญ์ƒ ์ „๊ฒฝ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. https://stackoverflow.com/questions/15758980/android-service-needs-to-run-always-never-pause-or-stop . ์š”์ปจ๋Œ€, ๋‚ด ์•ฑ์€ ๋ด‡์„ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ๊ฑฐ์˜ ํ•ญ์ƒ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ ์ „์— ์ด๋ฅผ ๋ฌธ์„œํ™”ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฌธ์„œ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

https://github.com/flutter/website/pull/802 ์˜ FAQ์— ์ถ”๊ฐ€

@zanderso -- @mjohnsullivan ์€ ๋ฌธ์„œ ์ชฝ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์—ฐ๋ฝ์ฒ˜์ž…๋‹ˆ๋‹ค.

ETA๊ฐ€ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๊นŒ?

@it2bz ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์œ„ํ•œ ETA์ž…๋‹ˆ๊นŒ? ์•ˆ๋“œ๋กœ์ด๋“œ ์ง€์›? ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜? iOS์—์„œ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ?

@Hixie Android ๋ฐ iOS ์ง€์› ๋ฐ ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋ณธ ๋ฌธ์„œ

iOS์˜ ๊ฒฝ์šฐ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์›ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Apple์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์—„๊ฒฉํ•œ ์ œํ•œ์„ ๋‘๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‹น์‚ฌ๊ฐ€ ์—ฐ๊ฒฐํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” API๋ฅผ ์ •ํ™•ํžˆ ์•„๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ์šฉ์ž ์œ„์น˜์™€ ํ•จ๊ป˜ ๊ธฐํšŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

์ด๊ฒƒ์ด '๋ฐฐ๊ฒฝ ์ž๋ฃŒ ๋ฌป๊ธฐ' ์Šค๋ ˆ๋“œ์ธ ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” flutter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Œ์•… ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์ „ํ™”์—์„œ ์•ฑ์ด ์ตœ์†Œํ™”๋œ ๊ฒฝ์šฐ์—๋„ ์Œ์•…์„ ๊ณ„์† ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€(API ํ˜„๋ช…ํ•˜๊ฒŒ) ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Android์—์„œ๋Š” ์•ฑ์ด ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ์‹ค์ œ๋กœ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ™œ๋™์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ Flutter์—์„œ ๋น„์Šทํ•œ ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

@SirWindfield ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•ฑ๊ณผ ๋ณ„๋„๋กœ ๊ณ„์† ์žฌ์ƒ๋˜๋Š” ๊ฐ ํ”Œ๋žซํผ์˜ ๊ธฐ๋ณธ ๋ฏธ๋””์–ด ํ”Œ๋ ˆ์ด์–ด API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@kirbyfan64 ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@Hixie , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†”๋ฃจ์…˜(Cordova): https://github.com/katzer/cordova-plugin-background-mode ๋˜๋Š” ์ด์™€ ๊ฐ™์€(Swift): https://github.com/yarodevuci/backgroundTask ๊ฐ€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Flutter ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์šฉ.

@holospeed ์ด๊ฒƒ๋“ค์€ Apple์ด ๋‹น์‹ ์—๊ฒŒ ๋ฐฐ์†ก์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. iOS์˜ ๊ฐœ์ธ ์•ฑ์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด pub์—์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ œ๊ณต ํŒจํ‚ค์ง€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ํ•ด๊ฒฐ์ฑ…์€ ๋ชจ๋“  ๊ฒƒ์„ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ์ถ”์ƒ์ ์ธ ๋ฐฐ๊ฒฝ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋Š” ๋Œ€์‹  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์˜ค๋””์˜ค ์žฌ์ƒ์„ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๊ฐ™์€ ํŠน์ • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ GPS/์œ„์น˜๋ฅผ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ฑ์„ ์•ฑ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํƒ€์ด๋จธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
ํŠน์ • ์‹œ๊ฐ„์— ์ „๊ฒฝ?

2018๋…„ 3์›” 21์ผ ์ˆ˜์š”์ผ 08:49์— Dylan Drost [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ • ๋ฐฐ๊ฒฝ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์˜ค๋””์˜ค ์žฌ์ƒ์„ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ GPS/์œ„์น˜๋ฅผ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ
์ถ”์ƒ์  ์ธ ๋ฐฐ๊ฒฝ์„ ๋งŒ๋“ค๋ ค๊ณ ํ•˜๋Š” ๋Œ€์‹  ๋ฐฐ๊ฒฝ ๋“ฑ์—์„œ
๋ชจ๋“  ๊ฒƒ์„ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜.

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/flutter/flutter/issues/3671#issuecomment-374867947 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AK-c-E0KdEkvbH5uCBIM8FaAbYQkSU2tks5tghQWgaJpZM4IVsUk
.

@iBob101 android_alarm_manager ํ”Œ๋Ÿฌ๊ทธ์ธ์„ android_intent ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์€ ํŠน์ • ์‹œ๊ฐ„์— ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์˜ค๋””์˜ค๋ฅผ ์žฌ์ƒํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ @aegis123 ์ œ์•ˆ์ด ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž‘๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์Œ์•…์„ ์žฌ์ƒํ•  ๋•Œ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด android_alarm_manager ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ์‚ดํŽด๋ณด์•˜๊ณ  ๋‚ด๊ฐ€ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ runFromBundle ์„ ํ˜ธ์ถœํ•˜์—ฌ Android์—์„œ Dart ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ๋œ Dart ํ•จ์ˆ˜๋Š” ์ง„์ž…์ ์— ์˜ํ•ด ์ง€์ •๋˜์ง€๋งŒ ํ•ด๋‹น ํ•จ์ˆ˜์— ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ƒ˜ํ”Œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์•Œ๋ฆผ์„ ํ†ตํ•ด ์ง์ ‘ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์ฑ„ํŒ… ์•ฑ์ž…๋‹ˆ๋‹ค. ์ด ๋งํฌ ์— ๋”ฐ๋ฅด๋ฉด ์•Œ๋ฆผ์€ ์›๊ฒฉ ์ž…๋ ฅ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์ฝ์€ ํ…์ŠคํŠธ๋ฅผ Dart ๊ธฐ๋Šฅ์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ ์‘๋‹ต์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์ƒˆ ์ด๋ฉ”์ผ์ด ์ˆ˜์‹ ๋˜์—ˆ์„ ๋•Œ ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•˜๋Š” ์ด๋ฉ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. ์ž‘์—… ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์€ ์ด๋ฉ”์ผ์„ ๋ณด๊ด€ํ•˜๋Š” ๊ธฐ๋Šฅ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ์ž‘์—…์€ Dart ๊ธฐ๋Šฅ์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์–ด๋–ค ์ด๋ฉ”์ผ์„ ๋ณด๊ด€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@MaikuB ํ‚ค ๊ฐ’ ์Œ์„ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ „์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก PR์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ ์˜ˆ์—์„œ๋Š” Android Service ๊ตฌ์„ฑ ์š”์†Œ์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  flutter๋Š” ๊ฐ OS๊ฐ€ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋‹จ์ผ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ kotlin/java oder swift์—์„œ ์•ฑ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@bkonyi ๋Š” ํ˜„์žฌ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด iOS์—์„œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€ํ† ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Flutter๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ: ์„œ๋ฒ„์—์„œ ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ํŒ์—…ํ•˜๋Š” ์„œ๋น„์Šค.

@s-bauer ํฌ๊ทธ๋ผ์šด๋“œ ์•Œ๋ฆผ์ด ์•„๋‹Œ ํ•œ ํ•ญ์ƒ ์‹คํ–‰์€ Android์˜ ๊ฒƒ์ด ์•„๋‹ˆ์ง€๋งŒ ์ฝ”๋“œ์—์„œ startForeground ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์˜ ์‚ฌ์–‘์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์•ˆ๋“œ๋กœ์ด๋“œ ํฐ์€ ํ™”๋ฉด์ด ๊บผ์ง€๊ณ  ์›€์ง์ด์ง€ ์•Š์€ ์ฑ„ ๋ช‡ ์‹œ๊ฐ„ ํ›„์— ๊นŠ์€ ์ž ์— ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋“  ์„œ๋น„์Šค(ํฌ๊ทธ๋ผ์šด๋“œ ์ œ์™ธ)๊ฐ€ ์˜ˆ์ •๋˜์–ด ์žˆ์ง€๋งŒ ์šด์˜ ์ฒด์ œ๋Š” ๊ทธ๊ฒƒ์ด ์ตœ์„ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. FCM์—์„œ ์˜ค๋Š” ํ‘ธ์‹œ ์•Œ๋ฆผ์ด๋‚˜ ํŠน์ • ์„ค์ •์—์„œ AlarmManager์—์„œ ์˜ค๋Š” ์•Œ๋žŒ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•  ๋•Œ๋งˆ๋‹ค Android ๊ธฐ๊ธฐ/์•ฑ์„ ๊นจ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ œ์–ด ํ•˜์— ์žˆ๋Š” ์œ ์ผํ•œ ๋‘ ๊ฐ€์ง€์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌด๊ธฐํ•œ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹œ๊ฐ. ์šด์˜ ์ฒด์ œ๊ฐ€ ๋ฐฐํ„ฐ๋ฆฌ์— ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž ์ž๊ธฐ ๋ชจ๋“œ์— ๋Œ€ํ•ด ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://developer.android.com/training/monitoring-device-state/doze-standby

iPhone์—์„œ๋Š” ํ›จ์”ฌ ๋” ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ FCM ๋˜๋Š” APNS์—์„œ ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ๋˜๋Š” ์—ฐ๊ฒฐ์ด ํ™œ์„ฑ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋น ๋ฅธ ์—…๋ฐ์ดํŠธ: iOS์šฉ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ๊ฒ€ํ† ๋ฅผ ์œ„ํ•ด ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค(PR flutter/engine#5539). ์ผ๋‹จ ๋„์ฐฉํ•˜๋ฉด ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–๋„๋ก Android ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ƒ˜ํ”Œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์›”๋ง์— ์™„๋ฃŒ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค .

@bkonyi ๋Š” https://github.com/flutter/flutter/issues/17566 ์œผ๋กœ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๊นŒ?

@piotrpalek , ์˜ˆ, ํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ์ฝœ๋ฐฑ์— ๋Œ€ํ•œ UI ๊ฒฉ๋ฆฌ๋ฅผ ๋” ์ด์ƒ ๊ณต์œ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋™์ž‘์ด ์ด์ „๊ณผ ์•ฝ๊ฐ„ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๊ทธ๋ผ์šด๋“œ UI์™€์˜ ๋ชจ๋“  ํ†ต์‹ ์€ ๊ฒฉ๋ฆฌ ํฌํŠธ, MethodChannel ๋˜๋Š” ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ์—…๋ฐ์ดํŠธ: iOS ๋ฐ Android ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ๊ฒ€ํ†  ๋Œ€์ƒ์ด๋ฉฐ ๊ณ„์† ๋ฐ˜๋ณต๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” flutter/engine#5539์˜ iOS ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ฃผ์š” ์ˆ˜์ • ์š”์ฒญ ์—†์ด ๋ฉฐ์น  ์•ˆ์— ์ƒ๋ฅ™ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ณ , flutter/engine#5640์˜ Android ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๊ฒ€ํ† ์˜ ์˜๊ฒฌ์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ๋‹ค์Œ ์ฃผ์— ์™„๋ฃŒ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ธฐ๋‹ค๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์—„์ฒญ๋‚œ. ์˜ˆ, ๋‘˜ ๋‹ค ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ•˜๋ฉด์„œ PR์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์–ธ๊ธ‰ํ–ˆ๋Š”๋ฐ iOS๋ฅผ ๋ณธ ์ ์ด ์žˆ๋Š”๋ฐ Android ์ƒ˜ํ”Œ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜๋ฉด Android ์•Œ๋žŒ ๊ด€๋ฆฌ์ž ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@MaikuB , ์˜ˆ, Flutter/engine#5640์ด ์ถœ์‹œ๋˜๊ณ  flutter/plugins#642๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด AlarmManager ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๋ณด์„ธ์š”. ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ํ•ด๊ฒฐ์ด bucket7 ๋งˆ์ผ์Šคํ†ค์œผ๋กœ ์ง€์—ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ฑฐ๊ธฐ์— ์ฐฉ๋ฅ™ํ•  ๊ฒƒ์ธ๊ฐ€? ์ด๊ฒƒ์€ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋ฉฐ์น  ๋™์•ˆ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๋‹ค์‹œ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ _๊ฑฐ์˜_ ์™”์–ด์š”. ๊ธฐ๋‹ค๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด์ œ flutter/engine#5539, flutter/engine#5947, flutter/engine#5954๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฏ€๋กœ Android ๋ฐ iOS์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์—”์ง„์— ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์Œ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ธฐ๋ณธ Flutter ์ €์žฅ์†Œ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—”์ง„๋กค. ๋ฌธ์„œ์™€ ์˜ˆ์ œ๊ฐ€ ์ž‘์—… ์ค‘์ด๋ฉฐ android_alarm_manager ํ”Œ๋Ÿฌ๊ทธ์ธ ์ˆ˜์ • ์‚ฌํ•ญ์ด ๊ฒ€ํ†  ์ค‘์ž…๋‹ˆ๋‹ค(flutter/plugins#642).

@bkonyi ๋Š” ์ด์ œ android_alarm_manager ๋„ IO์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

@ianldgs , ๋ถˆํ–‰ํžˆ๋„ ์•„๋‹ˆ์š”. iOS๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜๋„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ iOS ๊ตฌํ˜„์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค( ์ด SO ๊ฒŒ์‹œ๋ฌผ ์ฐธ์กฐ). ์ œํ•œ๋œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๋ชจ๋“œ(์˜ˆ: ์ค‘์š”ํ•œ ์œ„์น˜ ๋ณ€๊ฒฝ, ํ‘ธ์‹œ ์•Œ๋ฆผ, Bluetooth ์ƒํƒœ ๋ณ€๊ฒฝ ๋“ฑ) ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข…์ข… ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@bkonyi , iOS์—์„œ ์˜ค๋žœ ๊ธฐ๊ฐ„(3๋ถ„) ๋™์•ˆ ๊ธฐ๋ณธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ ๊นŒ์š”?

๋ช…ํ™•ํžˆ ํ•˜์ž๋ฉด, ์—ฌ๊ธฐ ์šฐ๋ฆฌ์˜ ํ˜„์žฌ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค...

๋ฐฐ๊ฒฝ:
์šฐ๋ฆฌ ์•ฑ์€ ๋ธ”๋ฃจํˆฌ์Šค ๋น„์ฝ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•œ ์œ„์น˜์—์„œ ๋ณด๋‚ด๋Š” ์‹œ๊ฐ„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. AppDelegate.swift์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋น„์ฝ˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ:
Flutter๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ์‹œ๊ฐ„ ์„ ์—ฐ์žฅํ•˜๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์œ„์น˜ ์ด๋ฒคํŠธ(์ด ๊ฒฝ์šฐ ์˜์—ญ ์ง„์ž…/์ข…๋ฃŒ)์— ์˜ํ•ด ๊นจ์–ด๋‚œ ํ›„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ช‡ ์ดˆ ํ›„์— ์•ฑ์„ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

Flutter์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ :
๊ธฐ๋ณธ iOS ์•ฑ์œผ๋กœ ๊ธฐ๋ณธ ๋น„์ฝ˜ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ์ง€์†์ ์œผ๋กœ 180์ดˆ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์–ป๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์‹œ๋„ํ•œ ๊ฒƒ:
์šฐ๋ฆฌ๊ฐ€ ์„ฑ๊ณตํ•œ ์œ ์ผํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ runApp() ์ „์— main()์— 30์ดˆ ์ง€์—ฐ์„ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธด ์„ค๋ช…์— ๋Œ€ํ•ด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ ํฐ ๋ฌธ์ œ์ด๋ฉฐ ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ์•ˆ์— ๋ฆด๋ฆฌ์Šคํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ˆ˜์ •์œผ๋กœ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ์šฐ๋ฆฌ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ์šฐ๋ฆฌ์˜ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊นจ์–ด๋‚ฌ์„ ๋•Œ Flutter๊ฐ€ ์•ฑ์„ ์กฐ๊ธฐ์— ์ข…๋ฃŒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ๋„์›€์ด๋ผ๋„ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

@AndrewPetrovics ๋ถˆํ–‰ํžˆ๋„ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ฃผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ด๊ฒƒ์ด ๊ท€ํ•˜๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €๋Š” iOS ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ์ •์ฑ…์— ์ต์ˆ™ํ•˜์ง€ ์•Š์ง€๋งŒ ์‹ค์ œ๋กœ ๊ท€ํ•˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ์œ ์‚ฌํ•œ Android + iOS์šฉ ์ง€์˜คํŽœ์‹ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž‘์—… ์ค‘์ด๋ฏ€๋กœ ํ•œ ๋ฒˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฃผ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜/๋‚ด์ผ iOS ๋ถ€๋ถ„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

@chinmaygarde , @AndrewPetrovics ๊ฐ€ ๊ฒช๊ณ  ์žˆ๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@bkonyi , ์ข‹์€ ์†Œ๋ฆฌ. ์šฐ๋ฆฌ๋Š” ๋‹น๋ถ„๊ฐ„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์ง€๋งŒ ๋งค์šฐ ํ•ดํ‚น๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด ๋”ฐ๋กœ ์ด์Šˆ๋ฅผ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

@bkonyi ์งˆ๋ฌธํ•ด๋„ ๋ ๊นŒ์š”? android_alarm_manager 0.2.0์€ ์–ธ์ œ pub.dartlang.org์— ๊ณต๊ฐœ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๋‚˜์š”?

@ethael ์ง€๊ธˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์–ป๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์˜ˆ์ œ๋‚˜ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
๊ฐ์‚ฌ ํ•ด์š”!

@Solban flutter/plugins ์ €์žฅ์†Œ์—๋Š” ๋‘ ๊ฐ€์ง€ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Android(Kotlin) ๋ฐ iOS(Obj-C)๋ฅผ ๋ชจ๋‘ ์ง€์› ํ•˜๋Š” ์ž‘์—…์— ์ง€์˜คํŽœ์‹ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์ง€๋งŒ ์ด๊ฒƒ์ด ํ”Œ๋Ÿฌํ„ฐ/ํ”Œ๋Ÿฌ๊ทธ์ธ์— ํฌํ•จ๋ ์ง€ ์—ฌ๋ถ€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๊ด€๋ จ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

  • ๊ฒฉ๋ฆฌ ๊ฐ„์— ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ PluginUtilities ํด๋ž˜์Šค
  • IsolateNameServer ๋Š” SendPort ๊ฐœ์ฒด๋ฅผ Flutter์— ๋“ฑ๋กํ•˜์—ฌ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค(์‹ค์ œ ๋ฌธ์„œ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค).
  • Android์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” FlutterNativeView
  • iOS์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” FlutterHeadlessDartRunner

ํ˜„์žฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž‘์„ฑ์— ๋Œ€ํ•œ ๊ณต์‹์ ์ธ ๋ฌธ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ์•ˆ์— Flutter ๋ธ”๋กœ๊ทธ์— Medium ๊ฒŒ์‹œ๋ฌผ์ด ๋‚˜ํƒ€๋‚˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ํ™œ์šฉํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค๊ณ„, ๊ตฌํ˜„ ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์„ ์•ˆ๋‚ดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ? Android์—์„œ ์žฅ๊ธฐ ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ Foreground service ๋ฟ์ž…๋‹ˆ๋‹ค.
์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” GPS ์œ„์น˜ ์ถ”์ ์„ ๊ณ„์†ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@audkar๋Š” ํ˜„์žฌ ์ง€์†์ ์ธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—†์ง€๋งŒ ์ด๊ฒƒ์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ธฐ๋Šฅ์„ ํฌ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค์™€ ํ•จ๊ป˜ ํ™œ์šฉํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ(์ง€์˜คํŽœ์‹ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์‚ฌ์šฉํ•œ JobIntentService ๋Œ€์‹ )์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ํ˜„์žฌ iOS / Android Background Geolocation / Geofencing SDK ๋ฅผ Flutter๋กœ ์ด์‹ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. flutter_background_geolocation ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Dart / Flutter์— ๋Œ€ํ•ด ์•ฝ 5์ผ ๊ฐ„์˜ ๊ฒฝํ—˜์ด ์žˆ์ง€๋งŒ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. 2์ฃผ ์ด๋‚ด์— ์ค€๋น„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹คํŠธ ๊ด€๋ จ ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ ๋ฌธ์„œ๋Š” ์กฐ๊ธˆ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์ด SDK๋Š” ๊ฑฐ์˜ 5๋…„์ด ๋„˜์—ˆ์œผ๋ฉฐ ํ’€ํƒ€์ž„์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์›๋ž˜ Apache Cordova ์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ ๋‚˜์ค‘์— React Native ๋ฐ NativeScript ๋กœ ์ด์‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๊ฐ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋™์ผํ•œ ํ•ต์‹ฌ Obj-c + Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

SDK๋Š” ์›๋ž˜ ์…€ ๋„คํŠธ์›Œํฌ๊ฐ€ ํŒŒ๊ดด๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ ์žฌ๋‚œ ์ง€์—ญ(์˜ˆ: ํ—ˆ๋ฆฌ์ผ€์ธ, ์ง€์ง„)์˜ ์ตœ์ดˆ ๋Œ€์‘์ž๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ๊ธฐ๊ธฐ๊ฐ€ ์žฌ๋ถ€ํŒ…๋˜๋”๋ผ๋„ ์ถ”์ ์„ ๊ณ„์†ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ์„œ๋ฒ„์— ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ์—…๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ž์ฒด SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ HTTP ์„œ๋น„์Šค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•ฑ์ด ์ข…๋ฃŒ๋˜์–ด SDK์˜ ํฌ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋งŒ "ํ—ค๋“œ๋ฆฌ์Šค"๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ Android์—์„œ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

:๊ฒฝ๊ณ : ์ด SDK๋Š” ์†Œ์…œ ์•ฑ์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. "์ฐจ๋Ÿ‰ ์ถ”์ " ์‚ฌ์šฉ ์‚ฌ๋ก€(์˜ˆ: ํƒ์‹œ, ๋ฐฐ๋‹ฌ ์„œ๋น„์Šค, ๋น„์ƒ ๋Œ€์‘, ์กฐ๊น… ๋“ฑ)๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ฐ„๋‹จํ•œ ๋ฐ๋ชจ ๋น„๋””์˜ค ์ž…๋‹ˆ๋‹ค.

์šด์˜ ์ฒ ํ•™์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ํŽธ์ง‘ ๋˜ํ•œ flutter_background_geolocation ์˜ ์ข…์†์„ฑ์œผ๋กœ ํฌํ•จ๋  flutter_background_fetch ๋กœ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์‹ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ ์•ฝ 15๋ถ„๋งˆ๋‹ค ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ iOS/Android ์•ฑ์„ ๊นจ์šฐ๊ณ  ์ฃผ๊ธฐ์  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก 30์ดˆ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ react-native ๋ฒ„์ „์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. flutter_background_geolocation ์„(๋ฅผ) ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ํŒŒ์‚ฌ๋“œ์— ํ”Œ๋Ÿฌ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ตฌ๋ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์„œ์˜ ์˜ˆ์ œ๋Š” React ๋„ค์ดํ‹ฐ๋ธŒ ๋ฒ„์ „์—์„œ ๋ฒˆ์—ญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@christocracy ์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค. background-fetch๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ์— ๋Œ€ํ•œ ํ‰๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@ethael Fetch๋Š” ์•ฝ 2์ฃผ ํ›„์— ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ๊ฐ„๋‹จํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค.

@bkonyi ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์‹คํ—˜ํ•˜๊ธฐ ์œ„ํ•ด ์œ„์น˜ ๋ณ€๊ฒฝ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค ๋Ÿฌ๋„ˆ์—์„œ ์‹คํ–‰๋œ dart ์ฝœ๋ฐฑ์€ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ MissingPluginException ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

Android์—์„œ android_alarm_manager ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด AlarmService.setPluginRegistrant(this); ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ iOS์— ์ƒ์‘ํ•˜๋Š” ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ iOS์˜ ํ—ค๋“œ๋ฆฌ์Šค ๋Ÿฌ๋„ˆ์—์„œ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ํ•ด๋‹น ์ปจํ…์ŠคํŠธ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์–ด๋–ป๊ฒŒ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@bkonyi ์ด ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‹ค์‹œ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. AlarmManager๋Š” ์‹œ๊ฐ„ ์ œํ•œ ์ด๋ฒคํŠธ๋งŒ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. Flutter๋Š” ๋” ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒ”์œ„ ๋‚ด์˜ Bluetooth ์žฅ์น˜์™€ ๊ฐ™์€ ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  iOS๋ฅผ ๋” ์ž˜ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. iOS๊ฐ€ ํ›จ์”ฌ ๋” ์ œํ•œ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ Flutter๋Š” ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Flutter๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ๋ปค์ง€๋งŒ, ๋‹จ์ˆœํ•œ ์•ฑ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์•ฑ์—์„œ Flutter๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋งŽ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ตฌ๊ธ€์— ๋” ๋งŽ์€ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ–ˆ๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค์–ด ๊ทธ๋“ค์ด ๋‚จ๊ธด ์ฃผ์š” ๊ณต๋ฐฑ์„ ๋ฉ”์šธ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋“ค์—๊ฒŒ ๋ถˆ๊ณตํ‰ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@dude8604 Google์ด ๋ชจ๋“  ๊ฒƒ์„ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋ฉฐ ์ƒํƒœ๊ณ„์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์€ (๋‚˜์™€ ๊ฐ™์€) ์ œ3์ž ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ 2๋งˆ๋ฆฌ๋ฅผ ๋ฐ๋ ค์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Cordova, React Native ๋ฐ NativeScript๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. Flutter๋ฅผ ์‚ฌ์šฉํ•œ ์ง€ 2์ฃผ๊ฐ€ ์ง€๋‚œ ํ›„, ๋ถ„๋ช…ํžˆ ๊ตฌ๋ฉ์ด ์žˆ์ง€๋งŒ(์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๊ธฐ์—ฌํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ Map ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์ง€๋งŒ) ๊ฝค ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ง€๋‚œ 5๋…„ ๋™์•ˆ iOS ๋ฐ Android(ํŠนํžˆ ์ง€์˜ค๋กœ์ผ€์ด์…˜ ๋ฐ ์ง€์˜คํŽœ์‹ฑ)์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ „๋ฌธ์œผ๋กœ ํ•˜๋Š” ์ „๋ฌธ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ์ด?

@christocracy ์ œ3์ž ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์ด๋‚˜ ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ฝœ๋ฐฑ ๊ธฐ๋Šฅ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์•ฑ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ฌธ์ œ๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด ๋ˆ„๋ฝ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ถœ์‹œํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ๊ฒฉ์ฐจ๋ฅผ ๋ฉ”์šฐ๊ธฐ ์œ„ํ•ด ์˜๋ฆฌ ํšŒ์‚ฌ์— ์ž์›ํ•˜์—ฌ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ์ด๊ฒƒ์€ ์ด๊ฒƒ์„ ๋…ผ์˜ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ์ฝ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ๋ฐ ๊ธฐ๋กํ•˜๊ณ  ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ๋ˆ„๋ฅด๋ฉด ๊ธฐ๋ณธ ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ์•Œ๋ฆผ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„์— ์žˆ๋Š” ์ƒˆ Bluetooth ์žฅ์น˜, ์†Œ์ผ“์—์„œ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ , USB ์žฅ์น˜์—์„œ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ , SMS ์ˆ˜์‹ , GPS ์œ„์น˜ ๋ณ€๊ฒฝ, Bluetooth ์žฅ์น˜ ์—ฐ๊ฒฐ ์‹œ๋„, ํŠน์ • ๋ฌผ๋ฆฌ์  ๋ฒ„ํŠผ ๋ˆŒ๋ฆผ, ๊ฐ€์†๋„๊ณ„ ๋ฐ์ดํ„ฐ ์ดˆ๊ณผ ์ง€์ •๋œ ๊ฐ’, ๋ฉ”์ธ ์•ฑ์ด ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ ๋“ฑ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•œ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ iOS ๋ฐ Android์—์„œ ์ž‘๋™ํ•˜๋Š” ํฌ๊ด„์ ์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ(๋ฌด๋ฃŒ ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด์„ ์Šค ํฌํ•จ)์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Flutter๋กœ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜์›ํžˆ ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@dude8604 ๋‹น์‹ ์ด ๋ฌด์—‡์„ ์›ํ•˜๋Š”์ง€ ์•Œ ๊ฒƒ ๊ฐ™์•„์š”. ์ด ์ž‘์—…์˜ ๋Œ€๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ง€์†์ ์œผ๋กœ ์•Œ๋ฆผ์ด ํ•„์š”ํ•œ ํฌ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด github ํ”„๋กœํ•„์„ ํ†ตํ•ด ์ €์—๊ฒŒ ์—ฐ๋ฝํ•˜์‹ญ์‹œ์˜ค.

React Native๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ "๋ฒ„ํŠผ, ํ…์ŠคํŠธ ํ•„๋“œ ๋ฐ ๋ชฉ๋ก ๋ณด๊ธฐ๋ฅผ ์–ป๊ณ  ๋‚˜๋จธ์ง€๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค"์™€ ๊ฐ™์•˜์œผ๋ฉฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋•๋ถ„์— ์ง€๊ธˆ์˜ ๋ชจ์Šต์œผ๋กœ ์„ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. Google์€ ๋ชจ๋“  ๊ตฌํ˜„์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฉฐ Flutter ํŒ€์ด Flutter ํฌ๊ธฐ์˜ 100x(10,000x?) ํฌ๊ธฐ์˜ ํŒ€์—์„œ ์ถ”๊ฐ€ํ•  ๋•Œ Android ๋ฐ iOS์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์€ ๋ฏธ์นœ ์ง“์ž…๋‹ˆ๋‹ค.

android_alarm_manager ๋ฐ image_picker ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ƒˆ ํ”„๋กœ์ ํŠธ์— Flutter 0.8.3-pre.47 ๋ฅผ ๊ตฌํ˜„ํ•œ ํ›„์—๋Š” (๋‘˜ ๋‹ค ์„ค์น˜๋œ ๊ฒฝ์šฐ) ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ๊ฐ€ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์˜ˆ์ œ์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋ณต์‚ฌํ•˜๊ณ  Firebase๋ฅผ ์„ค์ •ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@deckerst ๊ฐ€ ์ œ๊ธฐํ•œ ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ Android ๋ฐ iOS ๊ฐ„์— ํŒจ๋ฆฌํ‹ฐ๊ฐ€ ์—†์„ ๋•Œ ์ด๊ฒƒ์„ ๋‹ซํžŒ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ด๊ฒƒ์„ ์ถ”์ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ๋ฐฉ๊ธˆ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ๋ฅผ ๋ณด์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์—ฌ๊ธฐ์—์„œ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
https://medium.com/flutter-io/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124

@slightfoot๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๋ณด์•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก iOS ํ—ค๋“œ๋ฆฌ์Šค ์‹คํ–‰์„ ์œ„ํ•œ ํ‹ฐ์ผ“(#21925)์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ํ‹ฐ์ผ“ ์‚ฌ์ด์— ์ฐธ์กฐ๊ฐ€ ์žˆ์œผ๋ฉด ์œ ์šฉํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ด€๋ จ ์ฐธ๊ณ  ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ณต์‹ ๋ฌธ์„œ(์˜ˆ: ์š”๋ฆฌ ์ฑ…์˜ ์ผ๋ถ€๋กœ ํฌํ•จ)์— ํ—ค๋“œ๋ฆฌ์Šค ์‹คํ–‰์„ ํฌํ•จํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ๊ฐ€์ •ํ•˜์ง€๋งŒ ๋งค์ฒด๋ฅผ ํ™•์ธํ•˜์ง€ ๋ชปํ•˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋” ๋งŽ์€ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋ฌผ์–ด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์ง€์  @MaikuB , ์ด์— ๋Œ€ํ•œ ๋ฌธ์„œ ๋ฒ„๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค!

Flutter์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ง€์›, https://www.youtube.com/watch?v=_LfjILXswJs ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž˜ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Flutter๊ฐ€ ์ด์ œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์ง€์›ํ•œ๋‹ค๋ฉด ํŠœํ† ๋ฆฌ์–ผ์— ๋Œ€๋ถ€๋ถ„ ํ”Œ๋žซํผ๋ณ„ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

Android์šฉ Outlook ๋‹ค์šด๋กœ๋“œ https://aka.ms/ghei36


๋ณด๋‚ธ ์‚ฌ๋žŒ: tonka [email protected]
๋ณด๋‚ธ ๋‚ ์งœ: 2018๋…„ 9์›” 21์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 3:39:28
~์—: ํŽ„๋Ÿญ์ด๋‹ค/ํŽ„๋Ÿญ์ด๋‹ค
์ฐธ์กฐ: ํ•„๋ฆฝ ์™€์ด์Šค; ์–ธ๊ธ‰ํ•˜๋‹ค
์ œ๋ชฉ: Re: [flutter/flutter] Flutter๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์œ„ํ•œ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(#3671).

Flutter์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ง€์›, https://www.youtube.com/watch?v=_LfjILXswJs ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/flutter/flutter/issues/3671#issuecomment-423490126 ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/ABWxFrGMGvfFtwkf025Q2Je6lUTZu2aIVgaPuth ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•˜์„ธ์š”.

@dude8604 ํŠœํ† ๋ฆฌ์–ผ์€ ํŠน์ • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ถ€ ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์†Œ๋น„์ž ๋Š” ํ”Œ๋žซํผ๋ณ„ ๊ตฌํ˜„์— ๋Œ€ํ•ด (๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด) ๋ˆˆ์ด ๋ฉ€์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—†๋Š” ๊ฒฝ์šฐ ์†Œ๋น„์ž๋กœ์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?


๋ณด๋‚ธ ์‚ฌ๋žŒ: Chris Scott ์•Œ๋ฆผ @github.com
๋ณด๋‚ธ ๋‚ ์งœ: 2018๋…„ 9์›” 22์ผ ํ† ์š”์ผ ์˜คํ›„ 5:43:16
~์—: ํŽ„๋Ÿญ์ด๋‹ค/ํŽ„๋Ÿญ์ด๋‹ค
์ฐธ์กฐ: ํ•„๋ฆฝ ์™€์ด์Šค; ์–ธ๊ธ‰ํ•˜๋‹ค
์ œ๋ชฉ: Re: [flutter/flutter] Flutter๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์œ„ํ•œ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(#3671).

@dude8604 https://github.com/dude8604 ํŠœํ† ๋ฆฌ์–ผ์€ ํŠน์ • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ถ€ ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์†Œ๋น„์ž๋Š” ํ”Œ๋žซํผ๋ณ„ ๊ตฌํ˜„์— ๋Œ€ํ•ด (๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด) ๋ˆˆ์ด ๋ฉ€์—ˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/flutter/flutter/issues/3671#issuecomment-423783230 ๋˜๋Š” ์Šค๋ ˆ๋“œ https://github.com/notifications/unsubscribe-auth/ABWxFhmlurQ08wWXLmMvE3E6yQ_lYvS1U ๋ฅผ ์Œ์†Œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

@dude8604 ์•„๋‹ˆ์š”.

๋‚ด๊ฐ€ ํ˜„์žฌ ์•Œ๊ณ  ์žˆ๋Š” ํ•œ:

"๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰"ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์ด์ œ ์—„๊ฒฉ ํ•ฉ๋‹ˆ๋‹ค. iOS๋Š” ํ•ญ์ƒ ๊ทธ๋ž˜์™”์Šต๋‹ˆ๋‹ค.

@dude8604 , @christocracy ๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. Medium ๊ธฐ์‚ฌ์—์„œ ์„ค๋ช…ํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๊ธฐ๋Šฅ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Flutter ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ์ผ์น˜ํ•˜๋Š” ๊ธฐ์กด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—†๋Š” ํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์œ„ํ•ด ํ”Œ๋žซํผ๋ณ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Dart ์ธํ„ฐํŽ˜์ด์Šค ๋’ค์—์„œ ํ”Œ๋žซํผ๋ณ„ ์ฝ”๋“œ๋ฅผ ์ถ”์ƒํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

android_alarm_manager ๋ฐ image_picker ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ƒˆ ํ”„๋กœ์ ํŠธ์— Flutter 0.8.3-pre.47 ๋ฅผ ๊ตฌํ˜„ํ•œ ํ›„์—๋Š” (๋‘˜ ๋‹ค ์„ค์น˜๋œ ๊ฒฝ์šฐ) ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ๊ฐ€ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์˜ˆ์ œ์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋ณต์‚ฌํ•˜๊ณ  Firebase๋ฅผ ์„ค์ •ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@rupert2133 ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ œ๋ฅผ ์‹ ๊ณ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ €๋ฅผ ์–ธ๊ธ‰ํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ์ด ๋ฌธ์ œ๋Š” Dart ์ฝ”๋“œ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์— ๋Œ€ํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ฒƒ์ด์—ˆ๊ณ  ๋‹ซํ˜€ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์— ์žˆ๋Š” ์ถ”๊ฐ€ ์‘๋‹ต์€ ๋ฌปํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

android_alarm_manager ๋ฐ image_picker๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋‘˜ ๋‹ค ์„ค์น˜๋œ ๊ฒฝ์šฐ).

๋‚˜์—๊ฒŒ ์ƒ๊ธฐ์‹œํ‚จ๋‹ค. ์–ด์ œ ๋‚ด ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ Headless Android๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋™์•ˆ googlemaps here ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์ด Headless ์ƒํƒœ๋กœ ์žฌ๋“ฑ๋ก๋˜๋ฉด registrar.activity() == null .

๋‚ด ์•ฑ์„ ๋ถ€ํŒ…ํ•˜๋ ค๋ฉด ์ˆ˜๋™์œผ๋กœ ํ•ดํ‚นํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

public static void registerWith(Registrar registrar) {
    final GoogleMapsPlugin plugin = new GoogleMapsPlugin();
+    Activity activity = registrar.activity();
+    if (activity != null) {
      registrar.activity().getApplication().registerActivityLifecycleCallbacks(plugin);
      registrar
              .platformViewRegistry()
              .registerViewFactory(
                      "plugins.flutter.io/google_maps", new GoogleMapFactory(plugin.state, registrar));
+    }
  }

์ด๊ฒƒ์€ ๋งŽ์€ ์ˆ˜์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ์ฝ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ๋ฐ ๊ธฐ๋กํ•˜๊ณ  ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ๋ˆ„๋ฅด๋ฉด ๊ธฐ๋ณธ ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ์•Œ๋ฆผ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„์— ์žˆ๋Š” ์ƒˆ Bluetooth ์žฅ์น˜, ์†Œ์ผ“์—์„œ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ , USB ์žฅ์น˜์—์„œ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ , SMS ์ˆ˜์‹ , GPS ์œ„์น˜ ๋ณ€๊ฒฝ, Bluetooth ์žฅ์น˜ ์—ฐ๊ฒฐ ์‹œ๋„, ํŠน์ • ๋ฌผ๋ฆฌ์  ๋ฒ„ํŠผ ๋ˆŒ๋ฆผ, ๊ฐ€์†๋„๊ณ„ ๋ฐ์ดํ„ฐ ์ดˆ๊ณผ ์ง€์ •๋œ ๊ฐ’, ๋ฉ”์ธ ์•ฑ์ด ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ ๋“ฑ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•œ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ iOS ๋ฐ Android์—์„œ ์ž‘๋™ํ•˜๋Š” ํฌ๊ด„์ ์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ(๋ฌด๋ฃŒ ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด์„ ์Šค ํฌํ•จ)์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Flutter๋กœ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜์›ํžˆ ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@bkonyi ๊ทธ๋ ‡๋‹ค๋ฉด ํ˜„์žฌ ๊ธฐ์กด ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์œ„์˜ ์ž‘์—… ์ค‘ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ๋ฅผ ํด๋งํ•˜๊ธฐ ์œ„ํ•ด AlarmManager๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ•˜์ง€๋งŒ AlarmManager๋Š” iOS์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์ฃ ?

@dude8604 iOS์—์„œ ์ •๊ธฐ์ ์ธ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์€ "background-fetch" API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ณง ํ”Œ๋Ÿฌํ„ฐ๋กœ ์ด์‹ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

iOS "Background Fetch" API๋Š” ์•ฝ 15๋ถ„๋งˆ๋‹ค( ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฐ„๊ฒฉ ) ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž ์ž๋Š” ์•ฑ์„ ๊นจ์›Œ ์•ฑ์— ์ •ํ™•ํžˆ 30์ดˆ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ iOS๋Š” ๋จธ์‹  ๋Ÿฌ๋‹(์•„๋งˆ๋„)์„ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•˜๋ฃจ ์ค‘ ์‹œ๊ฐ„๊ณผ ๊ธฐ๊ธฐ/์•ฑ ์‚ฌ์šฉ ๋นˆ๋„์— ๋”ฐ๋ผ ์ด๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๋ฐค์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž ์„ ์ž˜ ๋•Œ ๊ฐ€์ ธ์˜ค๊ธฐ ์ด๋ฒคํŠธ๊ฐ€ ํ•œ ์‹œ๊ฐ„์— ํ•œ ๋ฒˆ ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@christocracy @bkonyi ์ด ๋ชจ๋“  ๊ฒƒ๊ณผ ๊ทธ์— ์ƒ์‘ํ•˜๋Š” Android๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@dude8604 ๊ทธ๋ƒฅ ์š”์ˆ ์ง€ํŒก์ด์™€ *poof* ๋ฅผ ํ”๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž‘์—…์šฉ ์žฅ๊ฐ‘์„ ๋ผ๊ณ  ์ง์ ‘ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ์Šค์Šค๋กœ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ ์„ ์ฐพ์•„์„œ ์ˆ˜๋งŒ ๋‹ฌ๋Ÿฌ๋ฅผ ์ง€๋ถˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@christocracy ๋งž์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ํฐ ๊ธฐ์—… ์ค‘ ํ•˜๋‚˜๊ฐ€ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์„ ๊ฐ–๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ถฉ๋ถ„ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜๋งŒ ๋‹ฌ๋Ÿฌ๋ฅผ ์ง€์ถœํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค.

๋„ค, ๋Œ€๊ธฐ์—…์ž…๋‹ˆ๋‹ค.

์ƒ๊ธฐ ๊ธฐ์—…์€ ๋˜ํ•œ ํŽธ์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐœ์ธ๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์‹œ๋„ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ถˆํƒ€๋Š” ๋”๋ฏธ๋กœ ๋ณ€ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ธ€์Ž„์š”, ์“ฐ๋ ˆ๊ธฐ์ž…๋‹ˆ๋‹ค.
์ˆ˜๋ฐฑ ๊ฐœ์˜ ํ”Œ๋žซํผ๋ณ„ API๊ฐ€ ์žˆ์œผ๋ฉฐ ๋‹จ์ผ ํŒ€์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์Šค์Šค๋กœ ๋ฐ”์ธ๋”ฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@dude8604 "์™„๋ฒฝํ•œ ๊ธฐ๋Šฅ"์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ •์˜๊ฐ€ ์ œ ์ •์˜์™€ ๋™์ผํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋“ค์˜ ์ฑ…์ž„์€ ๊ต์ฐจ๋กœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1 f you write this

๋ฌธ์„œ์—์„œ ๋ช…ํ™•ํ•œ ๋ฐฉํ–ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” Release Preview 2๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์ง€์›ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@Pushan-Gupta background-execution์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ „์šฉ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ดํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์น˜ ์ถ”์ ? ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ง€์˜คํŽœ์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? BT ์žฅ์น˜๋ฅผ ๊ฐ์ง€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋น„์ฝ˜? ์Œ์•…์„ ์žฌ์ƒ?

"๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์— ๋Œ€ํ•œ ๋ชจ๋“  ์ง€์›์„ ์ง€๋ฐฐํ•˜๋Š” ๋‹จ์ผ ๋ง"์€ ์—†์Šต๋‹ˆ๋‹ค.

@christocracy ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํŠน์ •ํ•œ ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์‚ผ๊ณ  ์žˆ์—ˆ๋‹ค. ์•ฑ์—์„œ ์ผ๋ถ€ ๊ฒŒ์‹œ๋ฌผ ์š”์ฒญ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฐ๊ฒฐ์ด ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๊ธฐ๊ฐ€ ๋‹ค์‹œ ์˜จ๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋˜์ž๋งˆ์ž ์•ฑ์ด ์—ด๋ ค ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ ์š”์ฒญ์˜ ๋Œ€๊ธฐ์—ด์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ: Whatsapp์€ ๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ ์ „์— ๋Œ€๊ธฐ์—ด์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ์žฅ์น˜๊ฐ€ ์˜คํ”„๋ผ์ธ ์ƒํƒœ์ด๋ฉด ๋Œ€๊ธฐ์—ด์„ ์ €์žฅํ•˜๊ณ  ์˜จ๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋˜์ž๋งˆ์ž ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

BTW ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฒฉ๋ฆฌ์— ๋Œ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ๋ก์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” PR์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ์ด ์žˆ์œผ์‹  ๋ถ„์ด ๊ณ„์‹œ๋‹ค๋ฉด...

https://github.com/flutter/engine/pull/6396

ํ˜„์žฌ FlutterHeadlessDartRunner ์˜ ์š”์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ €๋Š” ํ˜„์žฌ Android์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค(ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์Œ FlutterNativeView(ctx, true) ). ์ด ์ž‘์—…์€ ๋‹ค์†Œ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ iOS์—์„œ๋Š” ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: <strong i="10">@escaping</strong> () -> Void) {
    let headless = FlutterHeadlessDartRunner.init()
    headless.run(withEntrypoint: "main") // just EXC_BAD_ACCESS here
}

์•ผ,
Flutter ios์—์„œ ์•Œ๋ฆผ ์•ฑ์„ ๋„์™€์ฃผ์„ธ์š”

@MohdLucky ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์—๊ฒŒ ํ•„์š”ํ•œ ๋„์›€์€..?

@christocracy background_fetch ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ตฌํ˜„ ์ƒํƒœ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

background_fetch ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ตฌํ˜„ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜์„ธ์š”.
๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•Œ๋ฆผ์„ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ ... ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ”Œ๋Ÿฌํ„ฐ์˜ ์ผ๋ถ€๋ผ๊ณ  ์ •๋ง๋กœ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค :( .. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ์›น ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์†”๋ฃจ์…˜์ด ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ ๋ฌธ์ œ๋ณด๋‹ค ...

@radvansky-tomas ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์ด ํ”Œ๋Ÿฌํ„ฐ์˜ ์ฑ…์ž„์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋‹จ์ผ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•˜๋‚˜์˜ ํ”Œ๋Ÿฌํ„ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ 1~2์ผ์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‚˜๋ฅผ ์œ„ํ•ด ์Œ์•…์„ ์žฌ์ƒํ•  ์ˆ˜์žˆ๋Š” Android ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ kotlin์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ  flutter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹  ๊ณ„์ธต์„ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ ๋‚˜์ค‘์— iOS์—์„œ๋„ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ ๊ธฐ๋ณธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ „์ ์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ X๊ฐ€ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ง•์ง•๊ฑฐ๋ฆฌ๋Š” ๋Œ€์‹  ํŒ€์—์„œ ์ œ๊ณตํ•˜๋Š” ์ƒํƒœ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ์•„๋ฌด ๋ฌธ์ œ ์—†์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@SirWindfield ๋ถˆํ–‰ํžˆ๋„ ๋‹น์‹ ์€ ๋‹น์‹ ์ด ๋ฌด์Šจ ๋ง์„ ํ•˜๋Š”์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์•„ํ‚คํ…์ฒ˜์˜ ํ•„์ˆ˜ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

Flutter๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์†”๋ฃจ์…˜์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, OS๊ฐ€ ํ—ˆ์šฉํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์–ธ์–ด(Dart)๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์›๊ฒฉ ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•œ ํ›„ ์•ฑ์ด ์‹คํ–‰ ์ค‘์ด๊ณ  ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ์— ์ค‘๋‹จ์ ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์„œ๋น„์Šค, ๋ชจ๋ธ ๋ฐ ์ตœ์ข…์ ์œผ๋กœ UI๊ฐ€ ์žˆ๋Š” ๊ณณ์—์„œ ํ”Œ๋Ÿฌํ„ฐ/๋‹คํŠธ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ๊ฒฝ์šฐ์— ๋งŒ๋“ค๋ ค๋ฉด ... ์Œ์•…์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์žฌ์ƒ๋˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์žฌ์ƒ ๋ชฉ๋ก์„ ์™„๋ฃŒํ•˜์‹ญ์‹œ์˜ค ... 10 ๋ถ„ ํ›„์— ์•ฑ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Siri๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ—ค๋“œํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์˜ ์žฌ์ƒ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ์ง„์ž…์ ์— ๊ด€๊ณ„์—†์ด... ๊ธฐ๋ณธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€๋งŒ ํ•ด๋‹น UI๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ ํ”Œ๋Ÿฌํ„ฐ ์ฝ”๋“œ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๊ณ  ์•Œ๋ฆผ๊ณผ ํ•จ๊ป˜ ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์บ์น˜ ์•Œ๋ฆผ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”Œ๋Ÿฌํ„ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ์•”ํ˜ธํ™” ํ•ด๋… ๋ฐ ํ•ด๋…๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋œ ๋กœ์ปฌ ์•Œ๋ฆผ ํ•ด์ œ

ํœด๋Œ€ํฐ์—์„œ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ๋ฌธ์ œ ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ์ „ํ™”๊ฐ€ ์•ฑ์„ ์ฃฝ์ด์ง€ ์•Š์•˜์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‚ด ๋‚˜์œ.

@christocracy background_fetch ํ”Œ๋Ÿฌ๊ทธ์ธ Chris์— ๊ด€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@ethael ์—…๋ฐ์ดํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋นˆ ์ €์žฅ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/transistorsoft/flutter_background_fetch

@radvansky-tomas ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์— ๋Œ€ํ•œ ์ด Medium ๊ฒŒ์‹œ๋ฌผ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Dart ์ฝ”๋“œ์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ด๋ฏธ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•œ(ํ˜„์žฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์ง€์›ํ•˜๋Š” ๋งŽ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ํŠน์ • ์š”๊ตฌ์— ๋งž๊ฒŒ ๊ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@bkonyi ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด firebase_messaging ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ ์ด๊ฒƒ์ด ํ…œํ”Œ๋ฆฟ = ๋Ÿฌ๋„ˆ ๋ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ—ค๋“œ๋ฆฌ์Šค ์ฝ”๋“œ, ์ผ๋ถ€ ๊ทœ์น™, ํŒจํ„ด ํ‘œ์ค€์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹คํŠธ ์ธก๋ฉด์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ผ๋ถ€ ๋ธ”๋กœ๊ทธ, ์ œ์•ˆ ๋“ฑ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์ดˆ๊ธฐ ์ž‘์—… ์™„๋ฃŒ: https://github.com/radvansky-tomas/plugins/tree/master/packages/firebase_messaging

https://github.com/bkonyi/FlutterGeofencing ์˜ ์ผ๋ถ€ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ

์ด๋ฒˆ ์ฃผ ๋ง๊นŒ์ง€ ์™„๋ฃŒํ•ด์•ผ ํ•˜๋ฉฐ ์ง€๊ธˆ์€ iOS ๋น„ํŠธ๋งŒ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ๋Š” ๋กœ์ปฌ ์•Œ๋ฆผ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜์‹ ๋˜์—ˆ์Œ์„ ํ‘œ์‹œํ•˜๊ณ (์ž๋™ ์•Œ๋ฆผ) ์ƒˆ ๋กœ์ปฌ ์•Œ๋ฆผ์„ ๋ฆด๋ฆฌ์Šคํ•˜์—ฌ ์„ฑ๊ณต์„ ๋งค๋‹ˆํŽ˜์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€ ์ดˆ๊ธฐ ์ž‘์—… ์™„๋ฃŒ: https://github.com/radvansky-tomas/plugins/tree/master/packages/firebase_messaging

https://github.com/bkonyi/FlutterGeofencing ์˜ ์ผ๋ถ€ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ

์ด๋ฒˆ ์ฃผ ๋ง๊นŒ์ง€ ์™„๋ฃŒํ•ด์•ผ ํ•˜๋ฉฐ ์ง€๊ธˆ์€ iOS ๋น„ํŠธ๋งŒ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ๋Š” ๋กœ์ปฌ ์•Œ๋ฆผ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜์‹ ๋˜์—ˆ์Œ์„ ํ‘œ์‹œํ•˜๊ณ (์ž๋™ ์•Œ๋ฆผ) ์ƒˆ ๋กœ์ปฌ ์•Œ๋ฆผ์„ ๋ฆด๋ฆฌ์Šคํ•˜์—ฌ ์„ฑ๊ณต์„ ๋งค๋‹ˆํŽ˜์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

@goderbauer ์™€ ์ €๋Š” ์‹ค์ œ๋กœ ์ด ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ๊ณ„ํš์ด๋ผ๋ฉด ๋””์ž์ธ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ทธ ๋ถ€๋ถ„์„ ๊ฑฐ์˜ ๋๋ƒˆ์œผ๋ฏ€๋กœ ์ด์ œ ์ž๋™ ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ๋Š” ๋™์•ˆ dart๋กœ ์ž‘์„ฑ๋œ ์ฝœ๋ฐฑ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฑฐ๊ธฐ์—์„œ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์€ ๋ฃจํŠธ/์ •์  ๋ฐฉ๋ฒ•์ด์–ด์•ผ ํ•˜๋ฉฐ ์‹ค์ œ๋กœ ๊ฑฐ๊ธฐ์—์„œ ์•„๋ฌด ๊ฒƒ๋„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฌด์Œ ์ˆ˜์‹  ํ›„ ๋กœ์ปฌ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ํ”Œ๋Ÿฌํ„ฐ ๋กœ์ปฌ ์•Œ๋ฆผ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋“ฑ๋ก๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?)

https://github.com/flutter/engine/pull/6396 ์—์„œ ๋น„์Šทํ•œ ๊ฒŒ์‹œ๋ฌผ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ํ•„์š”ํ•œ ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ๋ฃจํŠธ ์ˆ˜์ค€ ์ฝœ๋ฐฑ:
void callback(FirebaseMessage m, MessageEvent e) async { print('Message $m Event: $e'); final SendPort send = IsolateNameServer.lookupPortByName('messaging_send_port'); send?.send(e.toString()); }

๋ฌธ์ œ๋Š” ํ•ด๋‹น ์ฝœ๋ฐฑ์—์„œ ๋ชจ๋“  dart ์ฝ”๋“œ + ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค...query firestore ๋“ฑ

My Background Fetch ๊ตฌํ˜„์ด ๋งˆ์นจ๋‚ด ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
background_fetch

@christocracy ๋งž์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ํฐ ๊ธฐ์—… ์ค‘ ํ•˜๋‚˜๊ฐ€ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์„ ๊ฐ–๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ถฉ๋ถ„ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜๋งŒ ๋‹ฌ๋Ÿฌ๋ฅผ ์ง€์ถœํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋งž๋Š” ๊ฒƒ ๊ฐ™์•„. ์‚ฌ๋žŒ๋“ค์˜ ์‹œ๊ฐ„์„ ์–ป๋Š”๋‹ค๋ฉด ๊ทธ๋“ค์—๊ฒŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋Œ๋ ค์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋ฉ‹์ง„ ๋งˆ์ผ€ํŒ… ํƒ€์ดํ‹€์„ ๋งŒ๋“ค์ง€ ๋งˆ์‹ญ์‹œ์˜ค!

์ด ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ณ ํ†ต์„ ์ฃผ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ๋‹ซํ˜€ ์žˆ๊ณ  ๋งŽ์€ ์˜๊ฒฌ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ์—์„œ ๋งŽ์€ ๊ตฌ์ฒด์ ์ธ ํ”„๋กœ์ ํŠธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋งŒ๋“ค ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :((๋‚ด๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋” ๋งŽ์€ ์ง„์ „์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ œ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

์—ฌ๊ธฐ์„œ ์›ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฌธ์„œํ™”ํ•˜๋Š” ๋ฐ ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋ฐฐ๊ฒฝ ์˜ˆ์ œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? (์˜ˆ: https://github.com/flutter/flutter/issues/23794)

์–ด์จŒ๋“ , ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ณ„์ ์ธ ์งˆ๋ฌธ์— ๊ฐœ๋ณ„์ ์ธ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Flutter๋Š” ํฌ๊ณ  ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ์ด๋ฉฐ ์—ฌ๊ธฐ Google์— ๋Œ€๊ทœ๋ชจ(๊ทธ๋ฆฌ๊ณ  ๋น ๋ฅด๊ฒŒ ํ™•์žฅ๋˜๊ณ  ์žˆ๋Š”) ํŒ€์ด ์žˆ์ง€๋งŒ ๋ชจ๋“  ๋ฌธ์ œ์— ๋™์‹œ์— ๋‹ต๋ณ€ํ•  ์ˆ˜ ์žˆ๋„๋ก Flutter์—์„œ ํ’€ํƒ€์ž„์œผ๋กœ ์ผํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Flutter๋Š” 100% ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๋ชจ๋“  ๋ฌธ์ œ๋Š” GitHub์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํŒจ์น˜๋Š” ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค. :)

์›ํ•˜๋Š” ๋ฌธ์ œ/๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์—ฌ ๋ชจ๋“  ๊ธฐ์—ฌ์ž์—๊ฒŒ ์ถ”๊ฐ€ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์„ธ์š”: https://github.com/flutter/flutter/issues/new

๊ฐ์‚ฌ ํ•ด์š”!

@eseidel ์ฑŒ๋ฆฐ์ง€ ์ˆ˜๋ฝ๋จ: #24278

์žฅ์น˜๋ณ„ ์ฝ”๋“œ ์ž‘์„ฑ์„ ํ”ผํ•˜๊ณ  Flutter Dart API ๊ตฌํ˜„์ด ์žฅ์น˜ ๋ฐ OS ์‚ฌ์–‘๊ณผ ํŠน์ • ๊ตฌํ˜„์„ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์—์„œ ์ด๋ฏธ ํ•ด๊ฒฐ

@Krunal79-flutter ์ •ํ™•ํžˆ ๊ทธ ์ ‘๊ทผ ๋ฐฉ์‹์—๋Š” ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํ”Œ๋Ÿฌํ„ฐ๊ฐ€ ์ด๋ฏธ ์ดˆ๊ธฐํ™”๋˜์—ˆ์œผ๋ฉฐ ์ ์ ˆํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•ก์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋˜ ๋ฌธ์ œ๋Š” ์•ฑ์ด ์‹ค์ œ๋กœ ์ฃฝ์—ˆ๊ณ  ์ž๋™ ์•Œ๋ฆผ(๋˜๋Š” ์•ฑ ํ™•์žฅ)์ด ์•ฑ์„ ๊นจ์šฐ๊ณ  ํ”Œ๋Ÿฌํ„ฐ๊ฐ€ ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋™์•ˆ(์ฆ‰, UI๊ฐ€ ์—†์Œ) "๋‹คํŠธ" ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Flutter ํŒ€์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ํ›จ์”ฌ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ๋ฌธ์ œ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜ Flutter ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํฐ ๊ณ ํ†ต์ด๋ฉฐ ์ข…์ข… ์‚ฌ์†Œํ•œ ๋ฐฉ์‹์œผ๋กœ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ๋งŽ์€ ์•ฑ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด ๋ฌธ์ œ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

@tomoerlemans010 https://github.com/flutter/flutter/issues/3671#issuecomment -438113161์˜ ๋Œ“๊ธ€์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ํŠน์ • ๋ฌธ์ œ๋Š” ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ์— ์˜๊ฒฌ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ง๋ฉดํ•œ ๋ฌธ์ œ๋กœ ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰