2014-08-28 95 views
1

我有一個應用程序將從其他應用程序,這是我的也啓動。但我的目的是啓動我的應用程序,並不對URL做任何事情。它只是一種讓用戶在不需要任何數據交換的情況下在應用之間切換的方式。自定義URL計劃IOS

我需要實現handleOpenURL或類似的方法來處理URL過濾掉不需要的命令,如蘋果Secure Coding guidelines提到,或者只是指定在info.plist中的方案(用URL標識和查看文檔的角色一起)考慮到我沒有對網址做任何事情的事實足夠安全嗎?

+1

如果你的應用程序什麼都不做,沒有什麼可以破解的。但我建議你實現'openURL:'進一步擴展和代碼透明。 – kelin 2014-08-28 13:38:55

+0

@kelin感謝您的評論。那麼,你是在暗示我實現了'openURL:'然後在這個方法中什麼也不做? – 2014-08-28 13:44:50

+1

只是返回NO,它會沒事的。 – kelin 2014-08-28 14:04:33

回答

5

是的,您需要執行application:handleOpenURL: application:openURL:sourceApplication:annotation:,並返回YES。根據Apple的文檔,第二種方法是優選的。

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ 
    return YES; 
} 

您可以另外檢查方案,源應用程序或其他條件,並相應地返回YES或NO。如果您有多個應用程序進行通信,則可以檢查源應用程序或使用註釋傳遞數據。

NSString* myappScheme = @"anindya"; // or even better read it from your plist 
-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ 
    return [url.scheme isEqualToString: myappScheme]; 
} 

就安全性而言,您對網址沒有做任何其他操作,所以沒有任何問題。蘋果在這方面的建議意味着如果你從另一個應用程序獲得一個URL,你必須仔細解析它,並認爲它可能是惡意的。如果您還檢查了源應用程序,那麼您只能從自己的應用程序獲取數據。

+1

謝謝你的答案。一個問題:如果該方案是錯誤的,那麼我認爲該應用程序不會首先啓動。所以如果我的方案是anindya並且某些應用程序試圖以anindya123啓動,我的應用程序將無法啓動。那麼我們爲什麼要做這個檢查,你能解釋一下嗎? – 2014-08-28 14:43:21

+1

當我們在這裏返回NO時,URL不會被執行。即該方法「要求代理人打開由URL標識的資源。」因此,「如果您不回答YES,您的應用程序將無法打開」 - 似乎不正確。 – 2014-08-28 16:05:57

+1

檢查URL方案是沒有必要的,你是對的。操作系統只會調用其「info.plist」中支持URL方案的應用程序。您也可以在不做任何檢查的情況下返回YES。 – orkoden 2014-08-29 09:17:44