2017-07-28 84 views
2

我的程序是這樣的:canOpenURL成功,但失敗的OpenURL爲電話爲urlschema

用戶在一個文本框的電話號碼。應用程序保存它。然後顯示具有「呼叫」按鈕的詳細屏幕中的電話號碼。我打電話canOpenURL方法,如果成功,然後我保持我的通話按鈕啓用,否則保持禁用。

我用這樣的格式創建URL:tel:phone number

現在,我的一個測試人員添加了電話號碼='55'。現在,當我打電話給canOpenURL時,它已成功,但是當我撥打openURL方法時,它不顯示電話號碼的彈出窗口。

這一個對其他電話號碼完全正常,即使是兩個數字的電話號碼,例如= 13,但對於某些特定的電話號碼,如55,56它失敗。

注意:根據我的客戶的要求,我不必對電話號碼進行任何驗證,就像它必須有n個字符左右。所以,請不要提供這樣的答案。我要求canOpenURL獲得成功並且openURL失敗的原因。

回答

1

功能canOpenURL將只檢查模式是否有效,即有安裝的應用程序將處理該URL。 它並不是說資源在您的情況下是有效的,即number是有效的。見https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl

的問題是無效的 - 在我看來 - 在RFC 2806引起tel URLScheme的規範。 我複製了一些相關部分:

telephone-url   = telephone-scheme ":" 
         telephone-subscriber 
telephone-scheme  = "tel" 
telephone-subscriber = global-phone-number/local-phone-number 
global-phone-number = "+" base-phone-number [isdn-subaddress] 
         [post-dial] *(area-specifier/
         service-provider/future-extension) 
base-phone-number  = 1*phonedigit 
local-phone-number = 1*(phonedigit/dtmf-digit/
         pause-character) [isdn-subaddress] 
         [post-dial] area-specifier 
         *(area-specifier/service-provider/
         future-extension) 
... 
area-specifier  = ";" phone-context-tag "=" phone-context-ident 

當我讀到了EBFN中,telephone-subscriper總是無論是+1字符開始。

而且就在2.5.2 Phone numbers and their scope,在RFC說:

If a <local-phone-number> is used, an 
<area-specifier> MUST be included as well. 

在我看來,這就是爲什麼電話的原因:55失敗,但電話:13就可以了。

+0

根據你的數字25,29等不應該工作,只有1或0開始的數字應該只工作。而我嘗試不同的數字,我發現這一點:1.所有3位數字的電話號碼工作,2.對於1和2位電話號碼的情況下,那些以0,1或2開始的作品,其他人不工作 –

+0

這很奇怪。在我解釋RFC的時候,你可以使用一個* global * numer(以'+'字符開頭)或者一個* local *數字,它總是需要一個* context *,例如'; phone-context ='at URI的結尾。也許只有蘋果知道他們做了什麼... –

相關問題