2017-02-07 4 views
1

Я хотел бы связать страницу Facebook из моего приложения iOS. Если Facebook App установлен на том же устройстве, страница должна отображаться там, или в противном случае в Safari:canOpenURL: facebookAppURL возвращает false, даже если приложение Facebook установлено

NSURL* facebookURL = [NSURL URLWithString:@"https://www.facebook.com/SomePage/"]; 
NSURL* facebookAppURL = [NSURL URLWithString:@"fb://profile/247377102029332"]; 

UIApplication* app = [UIApplication sharedApplication]; 
if ([app canOpenURL: facebookAppURL]) 
    [app openURL:facebookAppURL]; 
else 
    [app openURL:facebookURL]; 

Это должно работать в теории: Если я вхожу в facebookAppURL непосредственно в Safari, или пропустить canOpenURL проверку , Меня спрашивают, следует ли открыть ссылку в Facebook. После нажатия кнопки «ОК» приложение Facebook появится и отобразит страницу.

Однако обращение [app canOpenURL: facebookAppURL] allays возвращается false.

Тот же метод отлично работает с URL-адресами Twitter, например. twitter://user?screen_name=...: Проверка возвращает true, если приложение Twitter установлено и может обрабатывать URL-адрес. Почему это не удается для ссылок Facebook?

+0

Какая версия IOS вы используете? Проверьте этот ответ, если он поможет: [http://stackoverflow.com/a/40042291/5575752] (http://stackoverflow.com/a/40042291/5575752) –

ответ

2

Вы добавили это в белый список? Из соображений безопасности из iOS9 вам нужно создать белый список всех настраиваемых схем URL. Вы должны белый список URL, что ваше приложение будет взывать к использованию LSApplicationQueriesSchemes ключа в вашем Info.plist.

Это из документации:

При вызове метода «canOpenURL» на URL, который не в белый список, он будет возвращать «НЕТ», даже если это приложение установлено, что прописал для обработки этой схемы. A «Это приложение не разрешено запрашивать для схемы xxx» появится запись syslog.

Если вы вызываете метод «openURL» по URL-адресу, который не находится в вашем белом списке , он будет терпеть неудачу. A "Это приложение не разрешено запрашивать для схемы xxx" появится запись syslog.

Это, как вы создать белый список

<key>LSApplicationQueriesSchemes</key> 
<array> 
<string>fb</string> 
<string>fbapi</string> 
<string>fbauth2</string> 
<string>fbshareextension</string> 
<string>fb-messenger-api</string> 
<string>twitter</string> 
<string>viber</string> 
<string>whatsapp</string> 
</array> 
+0

Спасибо, что решила проблему. Однако я не понимаю, почему такая же процедура работала для схемы Twitter, которая также не была добавлена ​​в белый список ... –

Смежные вопросы