2014-07-03 65 views
22

編輯:tl;博士 - 這是可能的,請參閱下面的接受答案。我可以爲我的應用程序禁用自定義鍵盤(iOS8)嗎?

是否有任何防止自定義鍵盤(iOS8)用於我的應用程序(不僅是程序化)的方式?我主要對「每應用程序」設置感興趣,因此我的應用程序不允許使用自定義鍵盤,但禁用系統範圍內的自定義鍵盤是最後的選擇。

到目前爲止,我知道自定義鍵盤是系統範圍的,可以被任何應用程序使用。操作系統將退回到股票鍵盤僅用於安全文本輸入(secureTextEntry設置爲YES的文本字段)。這裏沒有多少希望。

我從App Extension Programming Guide得到了一個印象,即MDM(移動設備管理)可以限制設備使用自定義鍵盤,但我在OS X Yosemite的新測試版Apple Configurator.app中沒有找到該選項。 '配置器'只是缺少那個選項?

這裏的任何想法?我是否應該提供一個雷達來建議蘋果應該引入這樣的功能?

+2

如果用戶想使用自定義的鍵盤,你是誰阻止他們? –

+2

@FilipRadelic:安全原因(企業應用程序)。 – matm

+1

@matm - AFAIK你不能那樣做。自定義鍵盤「替換」系統範圍內的系統鍵盤。從企業角度來看,唯一可以做到的事情是:a)禁止安裝App Store應用程序或b)如果某人安裝了包含自定義鍵盤的應用程序,則執行一些操作。但a)很難在自帶設備上實現,b)很難找到... 然後,蘋果開放給雷達(也許適用於iOS9)。 – muenzpraeger

回答

46

看起來你得到了你在測試種子3 UIApplication.h的440行想要的東西:

// Applications may reject specific types of extensions based on the extension point identifier. 
// Constants representing common extension point identifiers are provided further down. 
// If unimplemented, the default behavior is to allow the extension point identifier. 
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier NS_AVAILABLE_IOS(8_0); 

現在沒有包含在這個文檔,但聽起來像它會做你問什麼在這裏。

我猜這些「擴展點標識符」是不是擴展的唯一標識符,但它們的類型,因爲也有這個就行545:

// Extension point identifier constants 
UIKIT_EXTERN NSString *const UIApplicationKeyboardExtensionPointIdentifier NS_AVAILABLE_IOS(8_0); 

TLDR:禁用自定義鍵盤你將包括這樣的事情在你的應用程序代理:

- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier { 
    if ([extensionPointIdentifier isEqualToString: UIApplicationKeyboardExtensionPointIdentifier]) { 
     return NO; 
    } 
    return YES; 
} 
+0

這是個好消息!我今天即將通過API差異化,並有更多理由這樣做:)感謝分享! – matm

+0

它的工作原理!非常感謝。 – echo

+0

它很棒!謝謝! – xlsmearlx

3

我只是想添加這個誰想要實現Xamarin的iOS這種方法的開發。我們的想法是要覆蓋你的AppDelegateShouldAllowExtensionPointIdentifier方法:

public override bool ShouldAllowExtensionPointIdentifier(UIApplication application, NSString extensionPointIdentifier) 
{ 
    if (extensionPointIdentifier == UIExtensionPointIdentifier.Keyboard) 
    {   
     return false; 
    } 
    return true; 
} 
7

斯威夫特3:

func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool { 
    if extensionPointIdentifier == UIApplicationExtensionPointIdentifier.keyboard { 
     return false 
    } 
    return true 
} 
相關問題