2015-12-17 43 views
5

W moim bieżącym projekcie muszę udostępnić tekst na WhatsApp z aplikacji na iOS.iOS9: canOpenURL zwraca false dla schematu URL WhatApp

Oto mój kod podzielić tekst na WhatsApp: -

NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%2C%20World!"]; 
if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) { 
[[UIApplication sharedApplication] openURL: whatsappURL]; 
} 

ale canOpenURL zawsze wraca fałszywe w iOS9.

Czy istnieje polityka prywatności iOS9? Czy ktoś może mi pomóc.

Z góry dziękuję.

+1

w z iOS 9 wprowadzono Apple Transport Security. Może ma to coś wspólnego z tym. Zasadniczo nie można już wysyłać żadnych niezabezpieczonych żądań. Ale nie jestem pewien, czy to jest problem w tym przypadku. – dan

+2

może to pomoże Ci http://stackoverflow.com/questions/30987986/ios-9-not-opening-instagram-app-with-url-scheme – dan

+0

ATS nie ma z tym nic wspólnego. Apple wprowadził oddzielny system, który wymaga podania w 'info.plist' schematów, których użyje aplikacja, ale jest całkowicie ortogonalny dla ATS. – Avi

Odpowiedz

36

W iOS 9 należy whitelist żadnych schematów URL Twój Aplikacja chce kwerendy w Info.plist pod klucz LSApplicationQueriesSchemes (tablicę łańcuchów):

Na przykład:

enter image description here

Tak w twoim przypadku zamiast fb i twitter musisz podać whatsapp.

Należy zauważyć, że ten mechanizm dotyczy tylko canOpenURL, a nie openURL. Nie musisz mieć listy na liście Info.plist, aby móc ją otworzyć przy pomocy openURL. Nadzieję, że pomaga.

+1

dziękuję ... działa ...:) –

+0

@MayankModi Cieszę się pomóc :) – z22

+2

Dla leniwych: Oto kod dla plist (dodać go pod koniec głównego węzła dict): ' LSApplicationQueriesSchemes \t \t \t WhatsApp \t ' –

0

Krok: 1 Dodaj LSApplicationQueriesSchemes w Info.plist

kroku: 2 Dodaj WhatsApp w pozycji

1

Oprócz odpowiedzi @ Z22, jeśli trzeba je dodać tekstowo (np Xamarin) to wygląda to:

<dict> 
     ... 

     <key>LSApplicationQueriesSchemes</key> 
     <array> 
      <string>whatsapp</string> 
     </array> 
    </dict> 
0

Dla mnie problem został ponieważ używałem rodzajów URL zamiast LSApplicationQueriesSchemes

i to działa tylko dla LSApplicationQueriesSchemes

Będzie nie działać

URL types

Będzie to praca

LSApplicationQueriesSchemes