Подтвердить что ты не робот

OpenURL: устарел в iOS 10

Apple с iOS 10 устарела для openURL: для openURL: опция: completeHandler Если у меня есть:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"]];

Как это станет? options: < # (nonnull NSDictionary *) # > подробно

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"] options:<#(nonnull NSDictionary<NSString *,id> *)#> completionHandler:nil];

Спасибо

Update options: @{} Для пустого словаря без ключа и значения http://useyourloaf.com/blog/querying-url-schemes-with-canopenurl/

4b9b3361

Ответ 1

Напишите вот так.

Обработать завершениеHandler

UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:@"http://www.google.com"];
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
    if (success) {
         NSLog(@"Opened url");
    }
}];

Без обработки завершенияHandler

[application openURL:URL options:@{} completionHandler:nil];

Ответ 2

//Objective-C

 UIApplication *application = [UIApplication sharedApplication];
 [application openURL:URL options:@{} completionHandler:nil];

//Swift

  UIApplication.shared.open(url, options: [:], completionHandler: nil)

Ответ 3

Apple представила метод openURL: как способ открыть внешние ссылки с iOS 2. Связанная функция canOpenURL: получила некоторые элементы управления конфиденциальности в iOS 9, чтобы остановить вас от запросов к устройствам для установленных приложений. Теперь с iOS 10 Apple отвергла простой старый openURL для openURL:options:completionHandler:.

Вот мое краткое руководство по тому, что вам нужно знать, чтобы открыть внешнюю ссылку с iOS 10.

Теперь устаревший метод имеет единственный параметр для открытия URL-адреса и возвращает логическое значение для отчета об успешном завершении или ошибке:

// Objective-C
    - (BOOL)openURL:(NSURL*)url

// Swift
    open func canOpenURL(_ url: URL) -> Bool

Новый метод в iOS 10:

// Objective-C  
    - (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options
  completionHandler:(void (^ __nullable)(BOOL success))completion

// Swift  
    open func open(_ url: URL, options: [String : Any] = [:],
        completionHandler completion: (@escaping (Bool) -> Swift.Void)? = nil)

Теперь есть три параметра:

  • URL для открытия
  • Словарь опций (см. ниже действительный записей). Используйте пустой словарь для того же поведения, что и openURL:.
  • Обработчик завершения, вызываемый в главной очереди с помощью успех. Неверный, если вы не заинтересованы в статусе.

Открытие URL-адреса с iOS 10

Что это значит, если у вас есть приложение только для iOS 10, не заботитесь о параметрах и статусе завершения и просто хотите остановить жалобы Xcode:

// Objective-C  
UIApplication *application = [UIApplication sharedApplication];
    [application openURL:URL options:@{} completionHandler:nil];

// Swift  
UIApplication.shared.open(url, options: [:], completionHandler: nil)

На практике, пока вы все еще поддерживаете iOS 9 или более раннюю версию, вы захотите вернуться к простому старому методу openURL. Давайте посмотрим на пример, где это сделать, а также с помощью обработчика завершения проверить статус открытия:

Сначала Objective-C:

- (void)openScheme:(NSString *)scheme {
       UIApplication *application = [UIApplication sharedApplication];
       NSURL *URL = [NSURL URLWithString:scheme];

       if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
           [application openURL:URL options:@{}
           completionHandler:^(BOOL success) {
                NSLog(@"Open %@: %d",scheme,success);
            }];
         } else {
           BOOL success = [application openURL:URL];
           NSLog(@"Open %@: %d",scheme,success);
         }
     }

// Typical usage
       [self openScheme:@"tweetbot://timeline"];

Я передаю пустой словарь для параметров, и я не делаю ничего полезного в обработчике завершения, кроме журнала успеха. Версия Swift:

func open(scheme: String) {
        if let url = URL(string: scheme) {
           if #available(iOS 10, *) {
               UIApplication.shared.open(url, options: [:],
               completionHandler: {
                  (success) in
                  print("Open \(scheme): \(success)")
                })
             } else {
                  let success = UIApplication.shared.openURL(url)
                  print("Open \(scheme): \(success)")
         }
     }
   }

// Typical usage

        open(scheme: "tweetbot://timeline")

Опции
Заголовочный файл UIApplication содержит один ключ для словаря опций:

  • UIApplicationOpenURLOptionUniversalLinksOnly: используйте логическое значение, установленное в true (YES), чтобы открыть URL, только если он является действительной универсальной ссылкой с приложением, настроенным для его открытия. Если приложение не настроено или пользователь отключил его, чтобы открыть ссылку, обработчик завершения вызывается с ложью (NO).

Чтобы переопределить поведение по умолчанию, создайте словарь с ключом, установленным в true (YES), и передайте его как параметр:

// Objective-C  
NSDictionary *options = @{UIApplicationOpenURLOptionUniversalLinksOnly : @YES};
        [application openURL:URL options:options completionHandler:nil];

// Swift  
let options = [UIApplicationOpenURLOptionUniversalLinksOnly : true]
       UIApplication.shared.open(url, options: options, completionHandler: nil)  

Так, например, если я установил это значение true и попытаюсь открыть URL https://twitter.com/kharrison, он потерпит неудачу, если у меня нет Приложение Twitter вместо того, чтобы открывать ссылку в Safari.

Refrence: openURL: устарел в iOS 10

Ответ 4

 // In Xcode 9 and iOS 11

  UIApplication *application = [UIApplication sharedApplication];
    NSURL *URL = [NSURL URLWithString:@"http://facebook.com"];
    [application openURL:URL options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"Opened url");
        }
    }];