Как я могу начать живую деятельность после того, как CllocationManagerDelegate моего приложения SwiftuiIOS

Программируем под IOS
Ответить
Anonymous
 Как я могу начать живую деятельность после того, как CllocationManagerDelegate моего приложения Swiftui

Сообщение Anonymous »

Согласно документации Apple, вы не можете начать живую деятельность в фоновом режиме: https://developer.apple.com/documentati ... ty/request(attributes:content:pushtype :) Я внедрил мониторинг региона через CllocationManagerDelegate :) (https://developer.apple.com/documentati ... erdelegate) и я успешно получаю уведомление об этих событиях через делегата. Тем не менее, я пытаюсь начать живую деятельность, когда пользователь выходит из региона, и он не работает. Я не могу понять, почему это не начнет живую деятельность. (Разве метод делегата не вызван с фона?). Или, это проблема обработки, как описано здесь: вызовите локальное значение, если пользователь входит/выходит из региона, пока приложение находится в фоновом режиме. Я хотел бы начать живую деятельность без удаленных уведомлений. Однако, если мне нужно, есть ли в любом случае, чтобы телефон отправил себе уведомление? Я хочу, чтобы приложение не было в автономном режиме, так как так оно будет использоваться.func locationManager(_: CLLocationManager, didExitRegion: CLRegion) {
Logger.location.debug("Exited a saved location")

Task(priority: .high) { @MainActor in
if ActivityManager.shared.activityState == .ended {
do {
try await StartActivity_AppIntent().perform()
} catch {
Logger.location.debug("Error starting activity: \(error.localizedDescription)")
}
}
}
}

< /code>
Вот намерение < /p>
struct StartActivity_AppIntent: LiveActivityIntent {
static var title: LocalizedStringResource = .init("app_intents.start_activity.title", defaultValue: "Start Activity")
static var description: IntentDescription? = IntentDescription(LocalizedStringResource("app_intents.start_activity.description", defaultValue: "Starts tracking a new activity."))

init() {}

@MainActor
func perform() async throws -> some IntentResult & ProvidesDialog {
Logger.appIntents.info("Start Activity App Intent Called")
let activity = try await ActivityManager.shared.startActivity()

// This is the only thing that does not work
LiveActivityManager.shared.start(startTime: activity.startTime)

let modelContainer = try ModelContainer(for: DataStore.schema, configurations: DataStore.modelContainerConfiguration)
let modelContext = ModelContext(modelContainer)

NotificationManager.handleStartActivityNotifications(modelContext: modelContext)

return .result(dialog: IntentDialog(.init("app_intents.start_activity.result.dialog", defaultValue: "Succesfully started an activity at \(activity.startTime.formatted(date: .complete, time: .shortened))!")))
}
}
< /code>
Вот моя ливеактивность manager < /p>
class LiveActivityManager {
static let shared = LiveActivityManager()

private var activity: Activity?

private init() { }

func start(startTime: Date) {
Logger.liveActivities.debug("Starting a live activity")
guard ActivityAuthorizationInfo().areActivitiesEnabled else {
return
}

let attributes = MyActivityAttributes(startTime: startTime)

do {
let activity = try Activity.request(
attributes: attributes,
content: .init(state: .init(), staleDate: nil),
pushType: nil
)

self.activity = activity
} catch {
Logger.liveActivities.error("Error starting live activity: \(error.localizedDescription)")
}
}

func end() {

// guard let activity else {
// Logger.liveActivities.error("No live activity active")
// return
// }

Task {
for activity in Activity.activities {
await activity.end(
ActivityContent(state: .init(), staleDate: nil),
dismissalPolicy: .immediate
)
}

self.activity = nil
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... erdelegate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»