• Stars
    star
    275
  • Rank 149,796 (Top 3 %)
  • Language
    Objective-C
  • Created almost 9 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🎹 Add a Slack / WhatsApp - style chat keyboard to your Cordova app!

Native Keyboard

Every mobile app attempts to expand until it includes chat. Those applications which do not are replaced by ones which can.

-- Luke Wroblewski

   

Videos of iOS and Android running the included demo app.

So it's just a fancy keyboard?

You're damn right it is! 👍😊

A cross platform WhatsApp / Messenger / Slack -style keyboard even. For your Cordova app.

OK, let me try this..

Open a command prompt and do:

$ cordova create nativekeyboardtest
$ cd nativekeyboardtest
$ cordova plugin add cordova-plugin-native-keyboard

.. and for a nicer demo experience you'll also want to add these plugins:

$ cordova plugin add cordova-plugin-console
$ cordova plugin add cordova-plugin-actionsheet

.. now copy the contents of our demo over www/index.html, and do one of these:

$ cordova run ios
$ cordova run android

I'm no dummy, gimme details man!

ok ok - OK! The plugin is currently entirely focused on the messenger component, but this will extend into other areas in the future. With that being said, this is the current awesome API:

showMessenger

The bare minimum you need to show the messenger and do something useful with the text a user typed is this (make sure you wait for deviceready to fire):

NativeKeyboard.showMessenger({
  onSubmit: function(text) {
    console.log("The user typed: " + text);
  }
});

There are however many options you can pass in to tweak the appearance and behavior:

option default iOS Android description
onSubmit yes yes A function invoked when the user submits his input. Receives the text as a single property. Make sure your page is UTF-8 encoded so Chinese and Emoji are rendered OK.
onKeyboardWillShow yes no A function invoked when the keyboard is about to pop up. Receives the height as a single property.
onKeyboardDidShow yes yes A function invoked when the keyboard popped up. Receives the height as a single property.
onKeyboardWillHide yes no A function invoked when the keyboard is about to close.
onKeyboardDidHide yes yes A function invoked when the keyboard closed.
onMessengerBarHeightChanged yes yes A function invoked when the height of the messenger bar (without the keyboard) changes.
onTextChanged yes yes A function invoked when any key is pressed, sends the entire text as response.
autoscrollElement yes yes Highly recommended to pass in if you want to replicate the behavior of the video's above (scroll down when the keyboard opens). Pass in the scrollable DOM element containing the messages, so something like document.getElementById("messageList").
scrollToBottomAfterMessengerShows yes yes If autoscrollElement was set you can also make the list scroll down initially, when the messenger bar (without the keyboard popping up) is shown.
keepOpenAfterSubmit false yes yes Setting this to true is like the video's above: the keyboard doesn't close upon submit.
animated false yes yes Makes the messenger bar slide in from the bottom.
showKeyboard false yes yes Open the keyboard when showing the messenger.
text yes yes The default text set in the messenger input bar.
textColor #444444 yes yes The color of the typed text.
placeholder yes yes Like a regular HTML input placeholder.
placeholderColor #CCCCCC yes yes The color of the placeholder text.
suppressSuggestions true no yes Set this to false to allow predictive text on Android
backgroundColor #F6F6F6 yes yes The background color of the messenger bar.
textViewBackgroundColor #F6F6F6 yes yes The background color of the textview. Looks nicest on Android if it's the same color as the backgroundColor property.
textViewBorderColor #666666 yes no The border color of the textview.
maxChars yes limited Setting this > 0 will make a counter show up on iOS (and ignore superfluous input on Android, for now)
counterStyle "none" yes no Options are: "none", "split", "countdown", "countdownreversed". Note that if maxChars is set, "none" will still show a counter.
type "default" yes no Options are: "default", "decimalpad", "phonepad", "numberpad", "namephonepad", "number", "email", "twitter", "url", "alphabet", "search", "ascii"
appearance "default" yes no Options are: "light", "dark".
secure false yes no disables things like the Emoji keyboard and the Predicive text entry bar
leftButton yes yes See below
rightButton yes yes See below

leftButton

The button on the left is optional and can be used to for instance make a picture, grab a picture from the camera role, shoot a video, .. whatever you fancy, really as the implementation is entirely up to you.

As shown in the video's it's common to present these options as an ActionSheet, either native or a HTML widget.

option default iOS Android description
type yes limited Either "text" (Android only currently), "fontawesome" or "ionicon".
value yes yes Depends on the type. Examples: for "text" use "Send", for "fontawesome" use "fa-battery-quarter", for "ionicon" use "\uf48a" (go to http://ionicons.com, right-click and inspect the icon and use the value you find in :before). Note that some fonticons are not supported as the embedded fonts in the plugin may lag behind a little. So try one of the older icons first.
textStyle "normal" yes yes If type is "text" you can set this to either "normal", "bold" or "italic".
disabledWhenTextEntered false yes yes Set to true to disable the button once text has been entered.
onPress yes yes A function invoked when the button is pressed. Use this button to prompt the user what he wants to do next by for instance rendering an ActionSheet.

rightButton

The button on the right is used to submit the entered text. You don't need to configure this at all if you're happy with the default "Send" label as the entered text itself will be emitted through the onSubmit callback.

option default iOS Android description
type "text" yes yes Either "text", "fontawesome" or "ionicon".
value "Send" yes yes See the description of leftButton.value.
textStyle "normal" yes yes See the description of leftButton.textStyle.
onPress yes yes A function invoked when the button is pressed. Use this to for instance hide the messenger entirely after text was entered by calling NativeKeyboard.hideMessenger().

hideMessenger

It's likely your app only has 1 one page where you want to show the messenger, so you want to hide it when the user navigates away. You can choose to do this either animated (a quick slide down animation) or not.

NativeKeyboard.hideMessenger({
  animated: true // default false
});

showMessengerKeyboard

What if you have previously have shown the messenger and the user dismissed its keyboard, but you want to programmatically pop up the keyboard again? Use this:

NativeKeyboard.showMessengerKeyboard(
    // these functions are optional
    function() { console.log('ok') },
    function(err) { console.log(err)}
);

hideMessengerKeyboard

And if you want to programmatically hide the keyboard (but not the messenger bar), use this:

NativeKeyboard.hideMessengerKeyboard(
    // these functions are optional
    function() { console.log('ok') },
    function(err) { console.log(err)}
);

updateMessenger

Manipulate the messenger while it's open. For instance if you want to update the text programmatically based on what the user typed (by responding to onTextChanged events).

option type iOS Android description
text string yes yes Replace the messenger's text by this. The current text remains if omitted.
caretIndex number yes yes Position the cursor anywhere in the text range. Defaults to the end of the text.
showKeyboard boolean yes yes If false or omitted no changes to the keyboard state are made.
NativeKeyboard.updateMessenger(
    {
      text: "Text updated! ", // added a space so the user can continue typing
      caretIndex: 5,
      showKeyboard: true
    },
    function() { console.log('updated ok') },
    function(err) { console.log(err)}
);

Notes for iOS

Notes for Android

  • If you're using cordova-android 7.1 or higher, update the plugin to at least 2.0.0 because cordova-android 7.1 has slightly different internals, making installation fail. With older Cordova Android versions you may need to stick to the 1.x version though.
  • Make sure your activity in AndroidManifest.xml has the (default) android:windowSoftInputMode="adjustResize" (or adjustPan) property. Otherwise the inputfield will be hidden when the keyboard pops up.

I like it, hook me up!

This plugin has been a BEAST to implement and its maintenance is killing me already so I need to make this a commercial offering (with a free trial, see below) to keep it afloat. If you have a compelling reason to not pay for an unlocked version let me know and we'll work something out.

  • Look up the ID of the app you want to use the plugin with - you can find it at the top of config.xml and is something like io.cordova.hellocordova (if you have a different staging ID, or iOS and Android ID's are different just send me all of those and you'll get multiple license codes and pay for only one).
  • Send a one-time fee of USD 199 (or EUR 180) to my PayPal account and make sure to include your app ID. Want to use a bankaccount instead? No problem, just contact me at [email protected] for details.
  • You'll quickly receive a license key (and instructions) which you can use to install the plugin.
  • You can now forever use this version and any future version of this plugin for this app without restrictions.

Once the license key (abc in this example) is received, you can add the plugin like this:

cordova plugin add cordova-plugin-native-keyboard --variable LICENSE=abc

Or if your iOS and Android package ids are different, use this (supported since plugin version 1.5.8):

cordova plugin add cordova-plugin-native-keyboard --variable LIC_ANDROID=abc --variable LIC_IOS=xyz

I heard about a trial!?

ALL features are available without a license, but you'll be restricted to 5 minutes of usage. Just indefinitely kill and relaunch the app if you need more time ;)

Can you remove the license check for my prototype apps?

Sure, just add the word 'prototype' (case insensitive) anywhere in your packageid. Example: 'com.mycompany.myclientapp-PROTOTYPE' or 'com.mycompany.prototypes.myclientapp'.

More Repositories

1

SocialSharing-PhoneGap-Plugin

👨‍❤️‍💋‍👨 Cordova plugin to share text, a file (image/PDF/..), or a URL (or all three) via the native sharing widget
Objective-C
1,778
star
2

nativescript-plugin-firebase

🔥 NativeScript plugin for Firebase
TypeScript
1,011
star
3

Calendar-PhoneGap-Plugin

📅 Cordova plugin to Create, Change, Delete and Find Events in the native Calendar
Java
773
star
4

cordova-plugin-googleplus

➕ Cordova plugin to login with Google Sign-In on iOS and Android
Java
567
star
5

Toast-PhoneGap-Plugin

🍻 A Toast popup plugin for your fancy Cordova app
C++
509
star
6

nativescript-barcodescanner

🔎 NativeScript QR / barcode (bulk)scanner plugin
TypeScript
292
star
7

cordova-plugin-safariviewcontroller

🐯 🐘 🐊 Forget InAppBrowser for iOS - this is way better for displaying read-only web content in your PhoneGap app
Java
281
star
8

Insomnia-PhoneGap-Plugin

😪 Prevent the screen of the mobile device from falling asleep
JavaScript
266
star
9

cordova-plugin-touch-id

💅 👱‍♂️ Forget passwords, use a fingerprint scanner!
Objective-C
216
star
10

cordova-plugin-actionsheet

📋 ActionSheet plugin for Cordova iOS and Android apps
JavaScript
208
star
11

cordova-plugin-3dtouch

👇 Quick Home Icon Actions and Link Previews
Objective-C
176
star
12

nativescript-pluginshowcase

An app I'm using to showcase a bunch of NativeScript plugins (also in the appstores!)
TypeScript
175
star
13

HealthKit

Cordova plugin for the iOS HealthKit framework
Objective-C
168
star
14

remove.bg

A Node.js wrapper for the remove.bg API
TypeScript
162
star
15

nativescript-local-notifications

📫 NativeScript plugin to easily schedule local notifications
TypeScript
162
star
16

SSLCertificateChecker-PhoneGap-Plugin

🛂 Prevent Man in the Middle attacks with this Cordova plugin
Objective-C
156
star
17

VideoCapturePlus-PhoneGap-Plugin

🎥
Objective-C
133
star
18

nativescript-fingerprint-auth

💅 👱‍♂️ Forget passwords, use a fingerprint scanner or facial recognition!
TypeScript
133
star
19

nativescript-feedback

📢 Non-blocking textual feedback for your NativeScript app
TypeScript
129
star
20

nativescript-ar

Augmented Reality NativeScript plugin
TypeScript
118
star
21

nativescript-secure-storage

🔐 NativeScript plugin for secure local storage of fi. passwords
TypeScript
108
star
22

nativescript-nodeify

Makes most npm packages compatible with NativeScript
JavaScript
91
star
23

nativescript-speech-recognition

💬 Speech to text, using the awesome engines readily available on the device.
TypeScript
90
star
24

nativescript-directions

👆 👉 👇 👈 Open the Maps app to show directions to anywhere you like
TypeScript
81
star
25

nativescript-localize

Internationalization plugin for NativeScript using native capabilities of each platform
TypeScript
79
star
26

nativescript-nfc

📝 NativeScript plugin to discover, read, and write NFC tags
TypeScript
77
star
27

nativescript-keyboard-toolbar

⌨️🛠Add a customizable toolbar on top of the soft keyboard
TypeScript
69
star
28

nativescript-admob

NativeScript plugin to earn some precious 💰💰 with ads by Google AdMob
JavaScript
68
star
29

cordova-plugin-ios-longpress-fix

🔍 Suppress the magnifying glass when long pressing an iOS9 PhoneGap app
Objective-C
67
star
30

nativescript-i18n

This is a plugin for Nativescript that implements native i18n in an easy manner.
JavaScript
65
star
31

cordova-plugin-taptic-engine

📳 Use Apple's Taptic Engine to vibrate your iPhone 6s (or up) in a variety of ways
Objective-C
61
star
32

Flashlight-PhoneGap-Plugin

🔦 Cordova plugin for using the torch / flashlight of your device
Java
60
star
33

cordova-plugin-backgroundaudio

🎶 Background Audio plugin for Cordova PhoneGap apps
Objective-C
57
star
34

nativescript-gradient

🎨 Easily add fancy (or subtle) gradient backgrounds to your views
TypeScript
54
star
35

nativescript-app-shortcuts

👇 Home Icon Actions for your NativeScript app, now also for Android!
TypeScript
48
star
36

nativescript-appversion

🔢 NativeScript plugin to retrieve your app's package ID and current version
JavaScript
48
star
37

nativescript-email

✉️ NativeScript plugin for opening draft e-mails
JavaScript
47
star
38

nativescript-calendar

📅 NativeScript plugin to Create, Delete and Find Events in the native Calendar
TypeScript
44
star
39

barcodescanner-lib-aar

Project which compiles barcodescanner sources to an aar for use in Android projects
Java
41
star
40

nativescript-clipboard

📋 NativeScript plugin to copy stuff to the device clipboard, and read from it again
TypeScript
40
star
41

nativescript-apple-sign-in

Sign In With Apple, as seen on WWDC 2019, available with iOS 13
TypeScript
39
star
42

footplr

An app using NativeScript and Vue with Firebase (Firestore)
HTML
38
star
43

nativescript-ocr

📰 🔍 Tesseract-powered OCR plugin for NativeScript
TypeScript
38
star
44

nativescript-printer

📠 Send an image or the screen contents to a physical printer
TypeScript
35
star
45

HeadsetDetection-PhoneGap-Plugin

🎧 A PhoneGap plugin for detection of a headset (wired or bluetooth)
Java
34
star
46

nativescript-numeric-keyboard

🔢 Replace the meh default number/phone keyboard with this stylish one
TypeScript
33
star
47

nativescript-keyframes

Facebook Keyframes plugin - if CSS animations don't cut it for ya
JavaScript
32
star
48

nativescript-star-printer

🌟 Print directly to Star Micronics printers from your NativeScript app! http://www.starmicronics.com/
Objective-C
32
star
49

cordova-plugin-app-icon-changer

Change the homescreen icon of your Cordova iOS app at runtime!
Objective-C
32
star
50

nativescript-bluetooth-demo

JavaScript
30
star
51

nativescript-android-tv

A little PoC demonstrating code sharing between Android Phone and TV apps
TypeScript
27
star
52

nativescript-homekit

🏡 HomeKit plugin for your fancy NativeScript app
TypeScript
24
star
53

nativescript-plugin-firebase-demo

Demo app for the NativeScript Firebase plugin
JavaScript
24
star
54

nativescript-performance-monitor

⚡ Proof your app maintains 60-ish FPS by collecting data or showing it on screen with this NativeScript plugin!
TypeScript
21
star
55

nativescript-pushy

Easy push notifications for your NativeScript app!
TypeScript
21
star
56

nativescript-webview-utils

🕸Add request headers to a NativeScript WebView. Perhaps more utils later.
TypeScript
20
star
57

nativescript-particle

🕹 Control your https://particle.io devices from NativeScript
TypeScript
20
star
58

cordova-plugin-webviewcolor

Objective-C
19
star
59

nativescript-appavailability

🔎 NativeScript plugin to check whether or not another app is installed on the device
JavaScript
19
star
60

nativescript-mapbox-demo

Demo app for the NativeScript Mapbox plugin
JavaScript
18
star
61

nativescript-pedometer

🐾 step count tracking plugin for your NativeScript app
TypeScript
17
star
62

nativescript-taptic-engine

📳 Use Apple's Taptic Engine to vibrate your iPhone 6s (and up) in a variety of ways
Vue
16
star
63

nativescript-app-icon-changer

Change the homescreen icon of your NativeScript iOS app at runtime!
TypeScript
16
star
64

nativescript-local-notifications-demo

Demo app for the NativeScript local notifications plugin
JavaScript
15
star
65

nativescript-dark-mode

NativeScript plugin to tap into iOS13's Dark Mode and Android's Night Mode configs
TypeScript
15
star
66

nativescript-aws

[DEPRECATED, see the readme] NativeScript plugin for Amazon's AWS ☁️ services
JavaScript
15
star
67

nativescript-headset-detection

Detect when a headphone (jack or bluetooth) is (dis)connected.
TypeScript
14
star
68

CameraRoll-PhoneGap-Plugin

Objective-C
11
star
69

nativescripthighcharts

Demoing how to add highcharts to your NativeScript app
TypeScript
10
star
70

NativePageTransitions-Ionic-Demo

Demo App for Ionic framwork apps with the Native Page Transitions plugin
JavaScript
10
star
71

X-Services-PhoneGap-Build-Plugins-Demo

A demo repo for all of our PhoneGap Build plugins
JavaScript
10
star
72

nativescript-call

NativeScript plugin to interact with the native Call UI
TypeScript
8
star
73

cordova-plugin-researchkit

Cordova / PhoneGap plugin for the Apple's ResearchKit
Objective-C
8
star
74

phonegapbuildmonitor

Repository for the iOS and Android PhoneGap Build app: Buildmeister
CSS
6
star
75

nativescript-izettle

Accept payments directly in your NativeScript app with iZettle
5
star
76

nativescript-calendar-demo

Demo app for the NativeScript Calendar plugin
JavaScript
5
star
77

ns-vue-firebase-test

Sample code to show how to use Firebase with the NS-Vue Vue CLI template
JavaScript
5
star
78

nativescript-randombytes

🔀 🔢 A NativeScript shim for the randombytes package
JavaScript
4
star
79

nativescript-date-utils

A simple plugin with a few date-related utilities
Shell
4
star
80

nativescript-admob-demo

Demo app for the NativeScript AdMob plugin
JavaScript
4
star
81

nativescript-snapkit

Log in to your app with your Snapchat account
TypeScript
3
star
82

ios-framework-barcodescanner

An iOS BarcodeScanner .framework library, wrapping the built-in iOS barcodescanner capabilities
Objective-C
2
star
83

bridgematebroadcast

Java
2
star
84

nativescript-barcodescanner-demo

Demo app for the NativeScript BarcodeScanner plugin
JavaScript
2
star
85

nativescript-ios-out-of-memory

Reproducing NativeScript issue 4490
JavaScript
1
star
86

nativescript-wkwebview

NativeScript WKWebView plugin for iOS
JavaScript
1
star
87

iOSMinVersion-PhoneGapBuild-Plugin

A PhoneGap Build plugin for overriding the minimal iOS version to deploy your app on.
1
star
88

iPadLandscapeEnabler-PhoneGapBuild-Plugin

1
star
89

mgggplus-frontend

Mobile client
JavaScript
1
star
90

nativescript-socket-mobile

1
star
91

Karma-App

JavaScript
1
star
92

nativescript-mapbox-vision

This is just a test, please ignore this repo for now 😊
TypeScript
1
star
93

cordova-and-nativescript-pokemon-app

Showing how to create a similar app in both Cordova and NativeScript, using plugins for SocialSharing and NetworkInformation.
TypeScript
1
star