[๐ŸŒŸ] Screen Time API ๊ถŒํ•œ ์„ค์ • ๋„์ „ํ•˜๊ธฐ (5) - FamilyControls ๊ถŒํ•œ ์„ค์ •ํ•˜๊ธฐ

Edenยท2025๋…„ 1์›” 28์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
106/132
post-thumbnail

iOS 16๋ถ€ํ„ฐ๋Š” FamilyControls ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋ฆฐ ํƒ€์ž„ ๊ด€๋ฆฌ์™€ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ ค๋ฉด ์•ฑ์—์„œ ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๋Š” ๊ณผ์ •์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.


FamilyControls

FamilyControls๋Š” iOS์—์„œ ์Šคํฌ๋ฆฐ ํƒ€์ž„ ๋ฐ ๊ฐ€์กฑ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ๋””๋ฐ”์ด์Šค ์‚ฌ์šฉ ์‹œ๊ฐ„, ์•ฑ ์ œํ•œ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ถŒํ•œ ์š”์ฒญ ์ฝ”๋“œ ๊ตฌํ˜„

import Foundation
import FamilyControls

struct FamilyControlsManager {
    
    let center =  AuthorizationCenter.shared
    
    func requestAuthorization(completionHandler: @escaping (() -> Void)) {
        Task {
            do {
                try await center.requestAuthorization(for: FamilyControlsMember.individual)
                print("์Šคํฌ๋ฆฐํƒ€์ž„ ๊ถŒํ•œ ์„ค์ • ์„ฑ๊ณต")
                completionHandler()
            } catch {
                print("๊ถŒํ•œ ์„ค์ • ์‹คํŒจ \(error.localizedDescription)")
                completionHandler()
            }
        }
    }
}
  • AuthorizationCenter.shared: FamilyControls ๊ถŒํ•œ ๊ด€๋ฆฌ ๊ฐ์ฒด์˜ ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค
  • requestAuthorization(for:): ๊ถŒํ•œ ์š”์ฒญ ๋ฉ”์„œ๋“œ. ๊ฐœ์ธ ์‚ฌ์šฉ์ž(FamilyControlsMember.individual)์˜ ๊ถŒํ•œ์„ ์š”์ฒญ
  • Task ๋ฐ try await: ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๊ถŒํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
  • completionHandler: ๊ถŒํ•œ ์š”์ฒญ ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ ํ›„ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋กœ์ €

์‚ฌ์šฉ๋ฒ•

private func requestScreenTimePermission() {
        if #available(iOS 15.0, *) {
            /// iOS 16.0 ์ด์ƒ์—์„œ ๊ถŒํ•œ ์š”์ฒญ
            familyControlsManager.requestAuthorization(completionHandler: {
                DispatchQueue.main.async {
                    self.navigateToMain()
                }
            })
        } else {
            /// iOS 15 ๋ฏธ๋งŒ์ผ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ
            let alert = UIAlertController(
                title: "์ง€์›๋˜์ง€ ์•Š๋Š” ๋ฒ„์ „",
                message: "์ด ๊ธฐ๋Šฅ์€ iOS 15.0 ์ด์ƒ์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.\n์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์ฃผ์„ธ์š”.",
                preferredStyle: .alert
            )
            alert.addAction(UIAlertAction(title: "ํ™•์ธ", style: .default, handler: { _ in
                self.navigateToMain()
            }))
            
            DispatchQueue.main.async {
                self.present(alert, animated: true, completion: nil)
            }
        }
    }
profile
Frontend ๐ŸŒ and iOS ๏ฃฟ ๐Ÿซถ๐Ÿป

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด