summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-customurlscheme/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-customurlscheme/README.md')
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/README.md201
1 files changed, 201 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/README.md b/StoneIsland/plugins/cordova-plugin-customurlscheme/README.md
new file mode 100644
index 00000000..2de829c2
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/README.md
@@ -0,0 +1,201 @@
+# Custom URL scheme PhoneGap Plugin
+#### launch your app by a link like this: `mycoolapp://`
+for iOS and Android, by [Eddy Verbruggen](http://www.x-services.nl)
+- This repo is for PhoneGap 3.0.0 and up
+- For PhoneGap 2.9.0 and lower, [switch to the phonegap-2.9.0-and-lower branch](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin/tree/phonegap-2.9.0-and-lower)
+
+1. [Description](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#1-description)
+2. [Installation](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#2-installation)
+ 2. [Automatically (CLI / Plugman)](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#automatically-cli--plugman)
+ 2. [Manually](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#manually)
+ 2. [PhoneGap Build](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#phonegap-build)
+3. [Usage](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#3-usage)
+4. [URL Scheme hints](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#4-url-scheme-hints)
+5. [License](https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin#5-license)
+
+
+### BEWARE: [This Apache Cordova issue](https://issues.apache.org/jira/browse/CB-7606) causes problems with Cordova-iOS 3.7.0: the `handleOpenURL` function is not invoked upon cold start. Use a higher or lower version than 3.7.0.
+
+## 1. Description
+
+This plugin allows you to start your app by calling it with a URL like `mycoolapp://path?foo=bar`
+
+* Compatible with [Cordova Plugman](https://github.com/apache/cordova-plugman)
+* Submitted and waiting for approval at PhoneGap Build ([more information](https://build.phonegap.com/plugins))
+
+### iOS specifics
+* Forget about [using config.xml to define a URL scheme](https://build.phonegap.com/docs/config-xml#url_schemes). This plugin adds 2 essential enhancements:
+ - Uniform URL scheme with Android (for which there is no option to define a URL scheme via PhoneGap configuration at all).
+ - You still need to wire up the Javascript to handle incoming events. This plugin assists you with that.
+* Tested on iOS 5.1, 6 and 7.
+
+### Android specifics
+* Unlike iOS, there is no way to use config.xml to define a scheme for your app. Now there is.
+* Tested on Android 4.3, will most likely work with 2.2 and up.
+
+
+## 2. Installation
+
+### Automatically (CLI / Plugman)
+LaunchMyApp is compatible with [Cordova Plugman](https://github.com/apache/cordova-plugman).
+Replace `mycoolapp` by a nice scheme you want to have your app listen to:
+
+Latest release on npm:
+```
+$ cordova plugin add cordova-plugin-customurlscheme --variable URL_SCHEME=mycoolapp
+```
+
+Bleeding edge master version from Github:
+```
+$ cordova plugin add https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin.git --variable URL_SCHEME=mycoolapp
+```
+(Note that the Phonegap CLI didn't support `--variable` before version 3.6.3, so please use the Cordova CLI as shown above in case you're on an older version)
+
+The LaunchMyApp.js file is brought in automatically.
+
+Note for iOS: there was a bug in CLI which caused an error in your `*-Info.plist`.
+Please manually remove the blank line and whitespace (if any) from `NSMainNibFile` and `NSMainNibFile~ipad` (or your app won't start at all).
+
+
+### Manually
+Don't shoot yourself in the foot - use the CLI! That being said, here goes:
+
+#### iOS
+1\. `Copy www/ios/LaunchMyApp.js` to `www/js/plugins/LaunchMyApp.js` and reference it in your `index.html`:
+```html
+<script type="text/javascript" src="js/plugins/LaunchMyApp.js"></script>
+```
+
+2\. Add this to your `*-Info.plist` (replace `URL_SCHEME` by a nice scheme you want to have your app listen to, like `mycoolapp`):
+```xml
+<key>CFBundleURLTypes</key>
+<array>
+ <dict>
+ <key>CFBundleURLSchemes</key>
+ <array>
+ <string>URL_SCHEME</string>
+ </array>
+ </dict>
+</array>
+```
+
+#### Android
+1\. Copy www/android/LaunchMyApp.js to www/js/plugins/LaunchMyApp.js and reference it in your `index.html`:
+```html
+<script type="text/javascript" src="js/plugins/LaunchMyApp.js"></script>
+```
+
+2\. Add the following xml to your `config.xml` to always use the latest version of this plugin:
+```xml
+<plugin name="LaunchMyApp" value="nl.xservices.plugins.LaunchMyApp"/>
+```
+
+3\. Copy `LaunchMyApp.java` to `platforms/android/src/nl/xservices/plugins` (create the folders)
+
+4\. Add the following to your `AndroidManifest.xml` inside the `/manifest/application/activity` node (replace `URL_SCHEME` by a nice scheme you want to have your app listen to, like `mycoolapp`):
+```xml
+<intent-filter>
+ <data android:scheme="URL_SCHEME"/>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+</intent-filter>
+```
+
+5\. In `AndroidManifest.xml` set the launchMode to singleTask to avoid issues like [#24]. `<activity android:launchMode="singleTask" ..`
+
+### PhoneGap Build
+
+Using LaunchMyApp with PhoneGap Build requires you to add the following xml to your `config.xml` to use the latest version of this plugin (replace `mycoolapp` by a nice scheme you want to have your app listen to):
+```xml
+<gap:plugin name="cordova-plugin-customurlscheme" source="npm">
+ <param name="URL_SCHEME" value="mycoolapp" />
+</gap:plugin>
+```
+
+The LaunchMyApp.js file is brought in automatically.
+
+NOTE: When Hydration is enabled at PGB, this plugin may not work.
+
+### Restoring cordova plugin settings on plugin add or update
+In order to be able to restore the plugin settings on `cordova plugin add`, one need to add the following feature into config.xml. Note that if you added the plugin with the `--save` param you will find this in your `config.xml` already, except for the `variable` tag which is likely a `param` tag. [Change that.](https://github.com/EddyVerbruggen/Custom-URL-scheme/issues/76)
+```xml
+ <feature name="Custom URL scheme">
+ <param name="id" value="cordova-plugin-customurlscheme" />
+ <param name="url" value="https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin.git" />
+ <variable name="URL_SCHEME" value="mycoolapp" /><!-- change as appropriate -->
+ </feature>
+```
+
+Please notice that URL_SCHEME is saved as `variable`, not as `prop`. However if you do `cordova plugin add` with a --save option, cordova will write the URL_SCHEME as a `prop`, you need to change the tag name from `param` to `variable` in this case.
+
+These plugin restore instructions are tested on:
+cordova-cli 4.3.+ and cordova-android 3.7.1+
+
+
+## 3. Usage
+
+1a\. Your app can be launced by linking to it like this from a website or an email for example (all of these will work):
+```html
+<a href="mycoolapp://">Open my app</a>
+<a href="mycoolapp://somepath">Open my app</a>
+<a href="mycoolapp://somepath?foo=bar">Open my app</a>
+<a href="mycoolapp://?foo=bar">Open my app</a>
+```
+
+`mycoolapp` is the value of URL_SCHEME you used while installing this plugin.
+
+1b\. If you're trying to open your app from another PhoneGap app, use the InAppBrowser plugin and launch the receiving app like this, to avoid a 'protocol not supported' error:
+```html
+<button onclick="window.open('mycoolapp://', '_system')">Open the other app</button>
+```
+
+2\. When your app is launched by a URL, you probably want to do something based on the path and parameters in the URL. For that, you could implement the (optional) `handleOpenURL(url)` method, which receives the URL that was used to launch your app.
+```javascript
+function handleOpenURL(url) {
+ console.log("received url: " + url);
+}
+```
+
+If you want to alert the URL for testing the plugin, at least on iOS you need to wrap it in a timeout like this:
+```javascript
+function handleOpenURL(url) {
+ setTimeout(function() {
+ alert("received url: " + url);
+ }, 0);
+}
+```
+A more useful implementation would mean parsing the URL, saving any params to sessionStorage and redirecting the app to the correct page inside your app.
+All this happens before the first page is loaded.
+
+## 4. URL Scheme hints
+Please choose a URL_SCHEME which which complies to these restrictions:
+- Don't use an already registered scheme (like `fb`, `twitter`, `comgooglemaps`, etc).
+- Use only lowercase characters.
+- Don't use a dash `-` because on Android it will become underscore `_`.
+- Use only 1 word (no spaces).
+
+TIP: test your scheme by installing the app on a device or simulator and typing yourscheme:// in the browser URL bar, or create a test HTML page with a link to your app to impress your buddies.
+
+
+## 5. License
+
+[The MIT License (MIT)](http://www.opensource.org/licenses/mit-license.html)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.