У меня есть ярлык. Если целевое приложение открыто, откройте мое приложение с помощью ярлыка.
Поэтому у меня возникла проблема с зацикливанием.
Это правильное поведение,
Открыть целевое приложение
Открыть мое приложение
Снова открыть целевое приложение (теперь целевое приложение уже работает в фоновом режиме)
Снова откройте мое приложение.
Мы ожидали поведения,
Открыть целевое приложение
Открыть мое приложение
Снова открыть целевое приложение (теперь целевое приложение уже работает в фоновом режиме)
Нет необходимости повторно перенаправляться в мое приложение, поскольку приложение находится в фоновом режиме.
import AppIntents
import SwiftUI
import SwiftUICore
import UIKit
//
// These will be the options in the Shortcut action to open a book or navigate to the library
enum NavigationType: String, AppEnum, CaseDisplayRepresentable {
case library
case book
// This will be displayed as the title of the menu shown when picking from the options
@available(iOSApplicationExtension 16, *)
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Navigation")
@available(iOSApplicationExtension 16.0, *)
static var caseDisplayRepresentations: [Self:DisplayRepresentation] = [
.library: DisplayRepresentation(title: "Library",
subtitle: "Return to the home page",
image: .init(systemName: "books.vertical")),
.book: DisplayRepresentation(title: "Book",
subtitle: "Navigate to a specific book",
image: .init(systemName: "book"))
]
}
// Enum to represent the static book options
enum AppOption: String, AppEnum, CaseDisplayRepresentable {
case youtube = "YouTube"
case facebook = "Facebook"
case twitter = "Twitter"
@available(iOSApplicationExtension 16.0, *)
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "App")
@available(iOSApplicationExtension 16.0, *)
static var caseDisplayRepresentations: [Self: DisplayRepresentation] = [
.youtube: DisplayRepresentation(title: "YouTube",
subtitle: "com.google.ios.youtube"),
.facebook: DisplayRepresentation(title: "Facebook",
subtitle: "com.facebook.ios"
),
.twitter: DisplayRepresentation(title: "Twitter",
subtitle: "com.twitter.ios")
]
}
// Struct to represent an app
struct App {
let appName: String
let bundleID: String
let deepLinking:String
}
// Sample app data (you can load this dynamically in the future)
let appsDetail = [
App(appName: "YouTube", bundleID: "com.google.ios.youtube",deepLinking:"youtube://"),
App(appName: "Facebook", bundleID: "com.facebook.ios",deepLinking:"fb://"),
App(appName: "Twitter", bundleID: "com.twitter.ios",deepLinking:"twitter://")
]
@available(iOSApplicationExtension 16.0, *)
struct OpenBook: AppIntent {
// Title o f the action in the Shortcuts app
@available(iOSApplicationExtension 16, *)
static var title: LocalizedStringResource = "Open App"
// Description of the action in the Shortcuts app
@available(iOSApplicationExtension 16.0, *)
static var description: IntentDescription = IntentDescription("This action will open the selected book in the Booky app or navigate to the home library.", categoryName: "Navigation")
// This opens the host app when the action is run
static var openAppWhenRun = true
@Parameter(title: "App", description: "The book to open in Booky", requestValueDialog: IntentDialog("Which book would you like to open?"))
var apps: AppOption
// An enum parameter
@Parameter(title: "Navigation", description: "Choose whether to open a book or navigate to Booky's library", default: .book, requestValueDialog: IntentDialog("What would you like to navigate to?"))
var navigation: NavigationType
// How the summary will appear in the shortcut action.
static var parameterSummary: some ParameterSummary {
Summary("Open \(\.$apps)")
}
@MainActor // some IntentResult {
guard let selectedBook = appsDetail.first(where: { $0.appName == apps.rawValue }) else {
throw NSError(domain: "OpenBookError", code: 1, userInfo: [NSLocalizedDescriptionKey: "Book not found."])
}
let userInfo: [String: Any] = ["selectedBook": [
"appName": selectedBook.appName,
"bundleId": selectedBook.bundleID,
"deepLinking": selectedBook.deepLinking,
]]
NotificationCenter.default.post(name: NSNotification.Name("OpenBookCallback"), object: nil, userInfo: userInfo)
return .result()
}
}
Мы ожидали поведения.
Откройте целевое приложение.
Откройте мое приложение.
Снова откройте целевое приложение (теперь целевое приложение уже находится в фоновом режиме).
Нет необходимости снова перенаправляться в мое приложение, поскольку приложение находится в фоновом режиме.
Снова откройте целевое приложение (теперь целевое приложение уже находится в фоновом режиме).
Нет необходимости снова перенаправляться в мое приложение, поскольку приложение находится в фоновом режиме.
li>
У меня есть ярлык. Если целевое приложение открыто, откройте мое приложение с помощью ярлыка. Поэтому у меня возникла проблема с зацикливанием. Это правильное поведение, [list] [*]Открыть целевое приложение [*]Открыть мое приложение [*]Снова открыть целевое приложение (теперь целевое приложение уже работает в фоновом режиме) Снова откройте мое приложение. [/list] Мы ожидали поведения, [list] [*]Открыть целевое приложение [*]Открыть мое приложение [*]Снова открыть целевое приложение (теперь целевое приложение уже работает в фоновом режиме)[*]Нет необходимости повторно перенаправляться в мое приложение, поскольку приложение находится в фоновом режиме. [/list] Вот мой код для ярлыка. [code]import AppIntents import SwiftUI import SwiftUICore import UIKit // // These will be the options in the Shortcut action to open a book or navigate to the library enum NavigationType: String, AppEnum, CaseDisplayRepresentable { case library case book
// This will be displayed as the title of the menu shown when picking from the options @available(iOSApplicationExtension 16, *) static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Navigation")
@available(iOSApplicationExtension 16.0, *) static var caseDisplayRepresentations: [Self:DisplayRepresentation] = [ .library: DisplayRepresentation(title: "Library", subtitle: "Return to the home page", image: .init(systemName: "books.vertical")), .book: DisplayRepresentation(title: "Book", subtitle: "Navigate to a specific book", image: .init(systemName: "book")) ] } // Enum to represent the static book options enum AppOption: String, AppEnum, CaseDisplayRepresentable { case youtube = "YouTube" case facebook = "Facebook" case twitter = "Twitter"
@available(iOSApplicationExtension 16.0, *) static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "App")
// Struct to represent an app struct App { let appName: String let bundleID: String let deepLinking:String }
// Sample app data (you can load this dynamically in the future) let appsDetail = [ App(appName: "YouTube", bundleID: "com.google.ios.youtube",deepLinking:"youtube://"), App(appName: "Facebook", bundleID: "com.facebook.ios",deepLinking:"fb://"), App(appName: "Twitter", bundleID: "com.twitter.ios",deepLinking:"twitter://") ]
// Title o f the action in the Shortcuts app @available(iOSApplicationExtension 16, *) static var title: LocalizedStringResource = "Open App" // Description of the action in the Shortcuts app @available(iOSApplicationExtension 16.0, *) static var description: IntentDescription = IntentDescription("This action will open the selected book in the Booky app or navigate to the home library.", categoryName: "Navigation") // This opens the host app when the action is run static var openAppWhenRun = true
@Parameter(title: "App", description: "The book to open in Booky", requestValueDialog: IntentDialog("Which book would you like to open?")) var apps: AppOption
// An enum parameter @Parameter(title: "Navigation", description: "Choose whether to open a book or navigate to Booky's library", default: .book, requestValueDialog: IntentDialog("What would you like to navigate to?")) var navigation: NavigationType
// How the summary will appear in the shortcut action. static var parameterSummary: some ParameterSummary { Summary("Open \(\.$apps)") }
return .result() } } [/code] Мы ожидали поведения. [list] [*]Откройте целевое приложение. [*]Откройте мое приложение. [*]Снова откройте целевое приложение (теперь целевое приложение уже находится в фоновом режиме). [*]Нет необходимости снова перенаправляться в мое приложение, поскольку приложение находится в фоновом режиме. [*]Снова откройте целевое приложение (теперь целевое приложение уже находится в фоновом режиме). [*]Нет необходимости снова перенаправляться в мое приложение, поскольку приложение находится в фоновом режиме. li> [/list]
Я предоставляю несколько ярлыков в систему для моего приложения через Appshortcutsprovider . Это, кажется, работает в целом, но они выглядят совершенно иначе от записей других приложений (сравните ниже скриншотов).
Я устанавливаю параметр...
Я предоставляю несколько ярлыков в систему для моего приложения через Appshortcutsprovider . Это, кажется, работает в целом, но они выглядят совершенно иначе от записей других приложений (сравните ниже скриншотов).
Я устанавливаю параметр...
Я предоставляю несколько ярлыков в систему для моего приложения через Appshortcutsprovider . Это, кажется, работает в целом, но они выглядят совершенно иначе от записей других приложений (сравните ниже скриншотов).
Я устанавливаю параметр...
Итак, при открытии приложения А я успешно сделал так, чтобы оно сразу же открывало приложение Б. Однако я хочу иметь возможность закрыть приложение B и вернуться в приложение A без повторного запуска ярлыка, после чего меня отправят обратно в...
Я написал собственный скрипт, который генерирует отпечаток пальца на основе данных как на стороне сервера, так и на стороне клиента, чтобы блокировать пользователей, которые продолжают возвращаться с разными IP-адресами. Я знаю, что это не на 100%...