6

I am working on creating custom keyboardas presented by EMOJI with having characters and pictorial icons like smileys and other day to day used symbols.So far i came to know that these symbols have unicode standards that are added to Unicode Consortium and approved by Apple.

http://itunes.apple.com/us/app/emoji-free!/id332509635?mt=8

I need help regarding the process these symbols are registered. Is it possible to make the keyboard compatible for text inputting in all the apps installed on iphone if so How to proceed ?.

NOTE:Are these keyboards approved by apple or apps with them gets rejected.. ...Any idea

Any help would be appreciated .

Thanks Vikas Ojha

vikas ojha
  • 217
  • 1
  • 4
  • 18

4 Answers4

11

The Emoji keyboard is build-in in iOS.

The only thing all the "Emoji" apps existing on the AppStore (like "emoji-free!") are doing, is that they activate this keyboard in the System Preferences, because it is hidden by default. These apps don't "create and install" the keyboard itself neither do they install the icons and glyphs (symbols), the smileys are already built-in in iOS too.

For example if an iPhone user receive a text message (SMS) containing some smileys, they do will see the smiley, even if they don't have installed any "Emoji-enabler" app like "Emoji-free!".


To be more precise, the emoji icons that Apple embedded in the iPhone fonts are not approved by the Unicode Standard. They are located in the "private" plane of Unicode: their codepoint is in a range that is especially reserved for private uses -- like the one Apple does by using it for these emojis -- but by definition as it is a private region, there is no dedicated name and standardized usage of these codepoint accross applications (contrary to codepoints like U+0041 which is dedicated to the glyph representing the latin letter "A")

AliSoftware
  • 32,623
  • 6
  • 82
  • 77
  • Some addition : since my answer, Unicode version 6.0 has been released, the codepoints for emoji glyphs has been standardized in a dedicated plane, and Apple has adopted this standard in iOS5. So even if in iOS4 the emoji characters were in a "private" plane of Unicode, iOS5 uses now the official codepoints (which are not in a private plane) for emoji glyphs. (previous codepoints from the private plane still display emoji glyphs, for the sake of compatibility, but the new codepoints are used when you insert an emoji character) – AliSoftware Jun 06 '12 at 08:06
  • Why is the keyboard hidden by default? and are there other keyboards hidden by default too? – Zeus Alexander Oct 27 '12 at 06:51
  • Because it used private Unicode codepoints back in iOS4, so was only compatible with other iPhones (sending an message containing an emoji with these private codepoints to another kind of phone or to a desktop computer would result in an unknown character being displayed instead). But since then, the Unicode 6.0 standard has been released and include an emoji plane with dedicated codepoints for emoji glyphs, and iOS5 and iOS6 now use these, which are compatible with other devices that respect the Unicode 6.0 standard, so the keyboard use official codepoints and is no longer hidden. – AliSoftware Oct 27 '12 at 09:57
  • Thanks for your response. I want create an application which will activate Pashto language keyboard, which is not in the Settings>International keyboards list, but I suspect it might be hidden like the Emoji keyboard which was hidden in previous iOS versions. The Pashto language keyboard is available in OS X so it might be available in iOS too. How can I find out if it is there in iOS? – Zeus Alexander Oct 27 '12 at 10:10
  • I actually don't have a clue. Maybe using a jailbroken iPhone one can inspect the files embedded in iOS itself and do some investigation about that (but that's not my area of expertise) – AliSoftware Oct 27 '12 at 10:15
2

Here's what I did in order to make a emoticons keyboard. First I created a custom view with two buttons and set self.textView.inputAccessoryView = self.accessoryView then had the two buttons do the following:

- (IBAction)emoticons:(id)sender 
{
    [self.textView resignFirstResponder];
    self.textView.inputView = self.emotiview.view;
    [self.textView becomeFirstResponder];
}

- (IBAction)text:(id)sender 
{
    [self.textView resignFirstResponder];
    self.textView.inputView = nil; // sets it back to it's initial form
    [self.textView becomeFirstResponder];
}

Beneath is a snippet of the code for creating all of the buttons and putting them into a view, which is in a scrollview.

for( int i = 0; i < self.emoticonsCharacters.count; i++ )
    {
        UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake((i % 5)*50, 10 + 50*(i / 5), 45, 45);
        [button setTitle: [self.emoticonsCharacters objectAtIndex:i] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(enterEmoticon:) forControlEvents:UIControlEventTouchDown];
        [self.emoticonsView1 addSubview:button];
    }

This is an array of all of the emoticons Characters.

-(NSArray*) emoticonsCharacters
{
    if(!emoticonsCharacters)
    { 
        // unicode taken from http://www.easyapns.com/iphone-emoji-alerts
        emoticonsCharacters = [[NSArray alloc] initWithObjects:@"\ue415",@"\ue056",@"\ue057", @"\ue414",@"\ue405",  @"\ue418", @"\ue417", @"\ue40d", @"\ue40a", @"\ue404", @"\ue105", @"\ue409", @"\ue40e", @"\ue402", @"\ue108", @"\ue403", @"\ue058", @"\ue407", @"\ue401", @"\ue40f", @"\ue40b", @"\ue406", @"\ue413", @"\ue411", @"\ue412", @"\ue410", @"\ue107", @"\ue059", @"\ue416", @"\ue408", @"\ue40c", @"\ue11a", @"\ue10c", @"\ue32c", @"\ue32a", @"\ue32d", @"\ue328", @"\ue32b", @"\ue022", @"\ue023", @"\ue327", @"\ue329", @"\ue32e", @"\ue32f", @"\ue335", @"\ue334", @"\ue021", @"\ue337", @"\ue020", @"\ue336", @"\ue13c", @"\ue330", @"\ue331", @"\ue326", @"\ue03e", @"\ue11d", @"\ue05a", @"\ue00e", @"\ue421", @"\ue420", @"\ue00d", @"\ue010", @"\ue011", @"\ue41e", @"\ue012", @"\ue422", @"\ue22e", @"\ue22f", @"\ue231", @"\ue230", @"\ue427", @"\ue41d", @"\ue00f", @"\ue41f", @"\ue14c", @"\ue201", @"\ue115", @"\ue428", @"\ue51f", @"\ue429", @"\ue424", @"\ue423", @"\ue253", @"\ue426", @"\ue111", @"\ue425", @"\ue31e", @"\ue31f", @"\ue31d", @"\ue001", @"\ue002", @"\ue005", @"\ue004", @"\ue51a", @"\ue519", @"\ue518", @"\ue515", @"\ue516", @"\ue517", @"\ue51b", @"\ue152", @"\ue04e", @"\ue51c", @"\ue51e", @"\ue11c", @"\ue536", @"\ue003", @"\ue41c", @"\ue41b", @"\ue419", @"\ue41a", @"\ue04a", @"\ue04b", @"\ue049", @"\ue048", @"\ue04c", @"\ue13d", @"\ue443", @"\ue43e", @"\ue04f", @"\ue052", @"\ue053", @"\ue524", @"\ue52c", @"\ue52a", @"\ue531", @"\ue050", @"\ue527", @"\ue051", @"\ue10b", @"\ue52b", @"\ue52f", @"\ue528", @"\ue01a", @"\ue134", @"\ue530", @"\ue529", @"\ue526", @"\ue52d", @"\ue521", @"\ue523", @"\ue52e", @"\ue055", @"\ue525", @"\ue10a", @"\ue109", @"\ue522", @"\ue019", @"\ue054", @"\ue520", @"\ue306", @"\ue030", @"\ue304", @"\ue110", @"\ue032", @"\ue305", @"\ue303", @"\ue118", @"\ue447", @"\ue119", @"\ue307", @"\ue308", @"\ue444", @"\ue441", @"\ue436", @"\ue437", @"\ue438", @"\ue43a", @"\ue439", @"\ue43b", @"\ue117", @"\ue440", @"\ue442", @"\ue446", @"\ue445", @"\ue11b", @"\ue448", @"\ue033", @"\ue112", @"\ue325", @"\ue312", @"\ue310", @"\ue126", @"\ue127", @"\ue008", @"\ue03d", @"\ue00c", @"\ue12a", @"\ue00a", @"\ue00b", @"\ue009", @"\ue316", @"\ue129", @"\ue141", @"\ue142", @"\ue317", @"\ue128", @"\ue14b", @"\ue211", @"\ue114", @"\ue145", @"\ue144", @"\ue03f", @"\ue313", @"\ue116", @"\ue10f", @"\ue104", @"\ue103", @"\ue101", @"\ue102", @"\ue13f", @"\ue140", @"\ue11f", @"\ue12f", @"\ue031", @"\ue30e", @"\ue311", @"\ue113", @"\ue30f", @"\ue13b", @"\ue42b", @"\ue42a", @"\ue018", @"\ue016", @"\ue015", @"\ue014", @"\ue42c", @"\ue42d", @"\ue017", @"\ue013", @"\ue20e", @"\ue20c", @"\ue20f", @"\ue20d", @"\ue131", @"\ue12b", @"\ue130", @"\ue12d", @"\ue324", @"\ue301", @"\ue148", @"\ue502", @"\ue03c", @"\ue30a", @"\ue042", @"\ue040", @"\ue041", @"\ue12c", @"\ue007", @"\ue31a", @"\ue13e", @"\ue31b", @"\ue006", @"\ue302", @"\ue319", @"\ue321", @"\ue322", @"\ue314", @"\ue503", @"\ue10e", @"\ue318", @"\ue43c", @"\ue11e", @"\ue323", @"\ue31c", @"\ue034", @"\ue035", @"\ue045", @"\ue338", @"\ue047", @"\ue30c", @"\ue044", @"\ue30b", @"\ue043", @"\ue120", @"\ue33b", @"\ue33f", @"\ue341", @"\ue34c", @"\ue344", @"\ue342", @"\ue33d", @"\ue33e", @"\ue340", @"\ue34d", @"\ue339", @"\ue147", @"\ue343", @"\ue33c", @"\ue33a", @"\ue43f", @"\ue34b", @"\ue046", @"\ue345", @"\ue346", @"\ue348", @"\ue347", @"\ue34a", @"\ue349", @"\ue036", @"\ue157", @"\ue038", @"\ue153", @"\ue155", @"\ue14d", @"\ue156", @"\ue501", @"\ue158", @"\ue43d", @"\ue037", @"\ue504", @"\ue44a", @"\ue146", @"\ue50a", @"\ue505", @"\ue506", @"\ue122", @"\ue508", @"\ue509", @"\ue03b", @"\ue04d", @"\ue449", @"\ue44b", @"\ue51d", @"\ue44c", @"\ue124", @"\ue121", @"\ue433", @"\ue202", @"\ue135", @"\ue01c", @"\ue01d", @"\ue10d", @"\ue136", @"\ue42e", @"\ue01b", @"\ue15a", @"\ue159", @"\ue432", @"\ue430", @"\ue431", @"\ue42f", @"\ue01e", @"\ue039", @"\ue435", @"\ue01f", @"\ue125", @"\ue03a", @"\ue14e", @"\ue252", @"\ue137", @"\ue209", @"\ue154", @"\ue133", @"\ue150", @"\ue320", @"\ue123", @"\ue132", @"\ue143", @"\ue50b", @"\ue514", @"\ue513", @"\ue50c", @"\ue50d", @"\ue511", @"\ue50f", @"\ue512", @"\ue510", @"\ue50e", @"\ue21c", @"\ue21d", @"\ue21e", @"\ue21f", @"\ue220", @"\ue221", @"\ue222", @"\ue223", @"\ue224", @"\ue225", @"\ue210", @"\ue232", @"\ue233", @"\ue235", @"\ue234", @"\ue236", @"\ue237", @"\ue238", @"\ue239", @"\ue23b", @"\ue23a", @"\ue23d", @"\ue23c", @"\ue24d", @"\ue212", @"\ue24c", @"\ue213", @"\ue214", @"\ue507", @"\ue203", @"\ue20b", @"\ue22a", @"\ue22b", @"\ue226", @"\ue227", @"\ue22c", @"\ue22d", @"\ue215", @"\ue216", @"\ue217", @"\ue218", @"\ue228", @"\ue151", @"\ue138", @"\ue139", @"\ue13a", @"\ue208", @"\ue14f", @"\ue20a", @"\ue434", @"\ue309", @"\ue315", @"\ue30d", @"\ue207", @"\ue229", @"\ue206", @"\ue205", @"\ue204", @"\ue12e", @"\ue250", @"\ue251", @"\ue14a", @"\ue149", @"\ue23f", @"\ue240", @"\ue241", @"\ue242", @"\ue243", @"\ue244", @"\ue245", @"\ue246", @"\ue247", @"\ue248", @"\ue249", @"\ue24a", @"\ue24b", @"\ue23e", @"\ue532", @"\ue533", @"\ue534", @"\ue535", @"\ue21a", @"\ue219", @"\ue21b", @"\ue02f", @"\ue024", @"\ue025", @"\ue026", @"\ue027", @"\ue028", @"\ue029", @"\ue02a", @"\ue02b", @"\ue02c", @"\ue02d", @"\ue02e",@"\ue332",@"\ue333",@"\ue24e", @"\ue24f",@"\ue537", nil];

    }
    return emoticonsCharacters;
}
  • I'm confused, is this just with a jailbroken iphone or does apple actually allow you to do these types of customizations??? If so what else can i do??? – thesowismine Nov 26 '17 at 10:17
0

As an addition to my previous answer, you can have your custom keyboard on your own app, anyway: you can define any UIView to be the "inputView" of a UITextField or UITextView (check the inputView @property in the documentation).

For example you could write self.myTextField.inputView = myPicker; where myPicker is an UIDatePickerView you created previously (by code or in your XIB file) and when the user tap on the textfield to give it the focus (= make it the firstResponder), instead of the standard keyboard, iOS will display the UIDatePicker.

But of course this is limited to your application, and for the textFields & textViews for which you configure it. That is, it is not presented as an "alternate input keyboard" you can switch onto using the "globe icon" on the keyboard, like for the Emoji keyboard or like when you switch from QWERTY to AZERTY (or any other keyboard you activated in your iPhone Settings). So this is not really the same usage as the "Emoji" case you describe.

AliSoftware
  • 32,623
  • 6
  • 82
  • 77
  • Ok if this is limited to my textview/textfields only in my app only then the text including emoticon .So will this text be visible on the other iPhone the same way its displayed on while Sending from my device...? – vikas ojha Aug 25 '11 at 12:39
  • Yes, because every iOS device (iPhone, iPad, iPod) include the fonts that have the needed characters in their Unicode table to display emojis. So any iPhone can display these Unicode codepoints as emojis as they all include the corresponding glyph. For any other device, as they don't have those emoji glyphs for these Unicode codepoints (but maybe nothing, maybe some private glyphs for a different usage) they won't be able to display it – AliSoftware Aug 25 '11 at 19:16
  • Actually, even if it is more special glyphs in the Unicode table of every font embed in iOS, the effect is quite the same as if you had a specific font (think of fonts like Webdings, Wingdings or Dingbats): as long as the receiver has the font, it will be able to display the same glyphs and these will be rendered the same. But if it does not have the font, this will be rendered differently or at least not as expected. This is quite the same idea with the Unicode private codepoint range. – AliSoftware Aug 25 '11 at 19:21
-1

check http://blog.jorgedelprado.com.ar/selector-personalizado-de-emoji/