#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:
работает, как ожидалось. Это не имеет никакого отношения к проблеме здесь. Другая часть вашего ответа, aboutLSApplicationQueriesSchemes
, верна.2.
LSApplicationQueriesSchemes
это кажется решением здесь, но может быть, для других это может помочь @LeoNatan3. Я отредактировал ответ. Однако следует добавить, что новый метод не существует в ios9. Поэтому, если автор хочет настроить таргетинг на оба, он не может использовать новый.