FaNiska
@FaNiska
Web Dev

Как передать универсальную ссылку в контроллер iOS приложения?

Сделал PWA хочется его засунуть внутрь iOS приложения,  однако опыта в создании таких приложений нет.

С помощью гугла и документации Apple для разработчиков удалось создать простенькое приложение.
Мой сайт это приложение открывает. Также выполнил ряд подготовительных мероприятий, чтобы при клике на ссылке на сайт открывалось приложение.

Проблема в том, что открывается только заранее "захардкоженная" главная страница, а хочется, чтобы открывалась именно ссылка, на которую пользователь хочет перейти.

Вопрос:
1) Если приложение еще не запущено: Как сделать так, чтобы при клике на ссылке приложение запускалось и открывало нужную страницу сайта?
2) Если приложение уже запущено: Как сделать так, чтобы при клике на ссылке приложение открывало нужную страницу сайта?

Просьба помочь ссылками или куском кода. Нагугленные варианты оказались сложны для понимания так как это самое первое приложение и я впервые вижу swift и xcode )

Мой ViewController:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
    
    var webView: WKWebView!
    
    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let myURL = URL(string:"https://my-pwa-site.com/web/")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }
}


Мой AppDelegate:
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {



    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }


}
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ответы на вопрос 1
gagarin67
@gagarin67
iOS-разработчик
Добрый день
Для начала стоит добавить поддержку доменов на сайте, это JSON-файл (дока ниже):
https://developer.apple.com/documentation/Xcode/su...

Далее в AppDelegate вашего приложения необходимо описать метод, который будет обрабатывать активити:
func application(_ application: NSApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([NSUserActivityRestoring]) -> Void) -> Bool

Вам нужен определенный тип NSUserActivityTypeBrowsingWeb (дока: https://developer.apple.com/documentation/xcode/su...)

После получения URL, можете получить доступ к rootViewController текущего UIWindow (проперти var window: UIWindow вашего AppDelegate), скастовать его к вашему ViewController и передать ему URL, в данном случае можно сделать так (window?.rootViewController as? ViewController)?.webView.load(URLRequest(url: url))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы