Проблема с интеграцией Whatsapp и openURL в iOS 10

#ios #objective-c #ios10 #whatsapp #openurl

#iOS #objective-c #ios10 #whatsapp #openurl

Вопрос:

Я интегрировал whastapp в свое приложение для iOS. Когда я тестировал его на своем устройстве iOS 10. Он вылетает из-за проблемы.

Моментальный снимок представления, которое не было отображено, приводит к пустому снимку. Убедитесь, что ваше представление было отображено хотя бы один раз, прежде чем делать снимок или снимок после обновления экрана.

 NSURL *whatsappURL = [NSURL URLWithString:[NSString stringWithFormat: @"whatsapp://send?abid=%@amp;text=WelcomeToChatBought",[abidArray objectAtIndex:buttonclicked.tag-1000]]];
        if ([[UIApplication sharedApplication] canOpenURL: whatsappURL])
        {
            [[UIApplication sharedApplication] openURL: whatsappURL];
        }
 

В чем может быть проблема. Любая помощь будет оценена.

Комментарии:

1. можете ли вы вставить полный журнал? выше должно быть предупреждение, а не ошибка

2. вы делаете какие-либо скриншоты с помощью кода?

Ответ №1:

Вам нужно указать в списке, если он не установлен LSApplicationQueriesSchemes :

Нравится,

 <key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme1</string>
 <string>urlscheme2</string>

</array> 
 

Также обратите внимание, что openURL(_:) устарел в iOS 10.

Новый метод UIApplication openURL:options:completionHandler:, который выполняется асинхронно и вызывает указанный обработчик завершения в основной очереди (этот метод заменяет openURL:).

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

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

Параметры:

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

Нравится,

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

Пример:

 NSString *scheme=[NSString stringWithFormat: @"whatsapp://send?abid=%@amp;text=WelcomeToChatBought",[abidArray objectAtIndex:buttonclicked.tag-1000]]];

  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);
  }
 

Подробнее читайте здесь:

http://useyourloaf.com/blog/openurl-deprecated-in-ios10/

Редактировать: (Код основан на версии iOS)

 NSURL *URL = [NSURL URLWithString:strUrl];

if([[UIDevice currentDevice].systemVersion floatValue] >= 10.0){

  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);
  }


}
else{

  bool can = [[UIApplication sharedApplication] canOpenURL:URL];

  if(can){

     [[UIApplication sharedApplication] openURL:URL];

  }

}
 

Комментарии:

1. Не рекомендуется, openURL: работает, как ожидалось. Это не имеет никакого отношения к проблеме здесь. Другая часть вашего ответа, about LSApplicationQueriesSchemes , верна.

2. LSApplicationQueriesSchemes это кажется решением здесь, но может быть, для других это может помочь @LeoNatan

3. Я отредактировал ответ. Однако следует добавить, что новый метод не существует в ios9. Поэтому, если автор хочет настроить таргетинг на оба, он не может использовать новый.