FIX: Fixed issue with firebase login in cordova, and merge problems

This commit is contained in:
walljm 2018-01-06 01:08:32 -05:00
parent e1e05fffc2
commit 1156b32c28
19 changed files with 777 additions and 64 deletions

File diff suppressed because one or more lines are too long

View File

@ -79,5 +79,22 @@
<plugin name="cordova-plugin-statusbar" spec="^2.2.3" /> <plugin name="cordova-plugin-statusbar" spec="^2.2.3" />
<plugin name="cordova-plugin-whitelist" spec="^1.3.1" /> <plugin name="cordova-plugin-whitelist" spec="^1.3.1" />
<plugin name="ionic-plugin-keyboard" spec="^2.2.1" /> <plugin name="ionic-plugin-keyboard" spec="^2.2.1" />
<universal-links>
<host name="bhgx5.app.goo.gl/XktS" scheme="https" />
<host name="dynamicbible-7c6cf.firebaseapp.com" scheme="https">
<path url="/__/auth/callback" />
</host>
</universal-links>
<plugin name="cordova-universal-links-plugin" spec="^1.2.1" />
<plugin name="cordova-plugin-buildinfo" spec="^2.0.1" />
<plugin name="cordova-plugin-browsertab" spec="^0.2.0" />
<plugin name="cordova-plugin-inappbrowser" spec="^2.0.1" />
<plugin name="cordova-plugin-customurlscheme" spec="^4.3.0">
<variable name="URL_SCHEME" value="com.firebase.cordova" />
<variable name="ANDROID_SCHEME" value=" " />
<variable name="ANDROID_HOST" value=" " />
<variable name="ANDROID_PATHPREFIX" value="/" />
</plugin>
<preference name="AndroidLaunchMode" value="singleTask" />
<engine name="android" spec="7.0.0" /> <engine name="android" spec="7.0.0" />
</widget> </widget>

View File

@ -14,35 +14,35 @@ if (rootdir)
for (var x = 0; x < platforms.length; x++) for (var x = 0; x < platforms.length; x++)
{ {
// open up the index.html file at the www root // // open up the index.html file at the www root
try // try
{ // {
var platform = platforms[x].trim().toLowerCase(); // var platform = platforms[x].trim().toLowerCase();
var testBuildPath; // var testBuildPath;
if (platform === 'android') // if (platform === 'android')
{ // {
testBuildPath = path.join(rootdir, 'platforms', platform, 'assets', 'www', 'build'); // testBuildPath = path.join(rootdir, 'platforms', platform, 'app', 'assets', 'www', 'build');
} // }
else // else
{ // {
testBuildPath = path.join(rootdir, 'platforms', platform, 'www', 'build'); // testBuildPath = path.join(rootdir, 'platforms', platform, 'app', 'www', 'build');
} // }
if (fs.existsSync(testBuildPath)) // if (fs.existsSync(testBuildPath))
{ // {
console.log('Removing map files from assets after prepare: ' + testBuildPath); // console.log('Removing map files from assets after prepare: ' + testBuildPath);
fs.unlinkSync(testBuildPath + '/vendor.js.map'); // fs.unlinkSync(testBuildPath + '/vendor.js.map');
fs.unlinkSync(testBuildPath + '/main.js.map'); // fs.unlinkSync(testBuildPath + '/main.js.map');
fs.unlinkSync(testBuildPath + '/main.css.map'); // fs.unlinkSync(testBuildPath + '/main.css.map');
} // }
else // else
{ // {
console.log('Build dir @ ' + testBuildPath + ' does not exist for removal'); // console.log('Build dir @ ' + testBuildPath + ' does not exist for removal');
} // }
} catch (e) // } catch (e)
{ // {
process.stdout.write(e); // process.stdout.write(e);
} // }
} }
} }

View File

@ -2468,6 +2468,21 @@
} }
} }
}, },
"cordova-plugin-browsertab": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-browsertab/-/cordova-plugin-browsertab-0.2.0.tgz",
"integrity": "sha1-Hgf5hy4VRnpQ59FKc/79h0+u1ko="
},
"cordova-plugin-buildinfo": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-buildinfo/-/cordova-plugin-buildinfo-2.0.1.tgz",
"integrity": "sha1-Y2bJggvkPQ0yL49L4Cp9LFpl/0g="
},
"cordova-plugin-compat": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-compat/-/cordova-plugin-compat-1.2.0.tgz",
"integrity": "sha1-C8ZXVyduvZIMASzpIOJ0F3V2Nz4="
},
"cordova-plugin-console": { "cordova-plugin-console": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-console/-/cordova-plugin-console-1.1.0.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-console/-/cordova-plugin-console-1.1.0.tgz",
@ -2478,11 +2493,21 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-crosswalk-webview/-/cordova-plugin-crosswalk-webview-2.3.0.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-crosswalk-webview/-/cordova-plugin-crosswalk-webview-2.3.0.tgz",
"integrity": "sha1-4u407P2t3YS9qE5yZjU55AyZ0yQ=" "integrity": "sha1-4u407P2t3YS9qE5yZjU55AyZ0yQ="
}, },
"cordova-plugin-customurlscheme": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-customurlscheme/-/cordova-plugin-customurlscheme-4.3.0.tgz",
"integrity": "sha1-Avlod4tAk5kOsEB/P6GxRY1wX5Q="
},
"cordova-plugin-device": { "cordova-plugin-device": {
"version": "1.1.7", "version": "1.1.7",
"resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-1.1.7.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-1.1.7.tgz",
"integrity": "sha1-/JQRG+aTJijGaGiTjd89yCyfv+Y=" "integrity": "sha1-/JQRG+aTJijGaGiTjd89yCyfv+Y="
}, },
"cordova-plugin-inappbrowser": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-inappbrowser/-/cordova-plugin-inappbrowser-2.0.1.tgz",
"integrity": "sha1-/qk31UgZGv5hrXyY9SPx/GIi5bM="
},
"cordova-plugin-splashscreen": { "cordova-plugin-splashscreen": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-splashscreen/-/cordova-plugin-splashscreen-4.1.0.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-splashscreen/-/cordova-plugin-splashscreen-4.1.0.tgz",
@ -2498,6 +2523,18 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz",
"integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q=" "integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q="
}, },
"cordova-universal-links-plugin": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/cordova-universal-links-plugin/-/cordova-universal-links-plugin-1.2.1.tgz",
"integrity": "sha1-M70nhc3UdIc6Q7jDGVuTTlAA5Js=",
"requires": {
"mkpath": "1.0.0",
"node-version-compare": "1.0.1",
"plist": "2.1.0",
"rimraf": "2.6.2",
"xml2js": "0.4.19"
}
},
"core-js": { "core-js": {
"version": "2.5.3", "version": "2.5.3",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
@ -7433,6 +7470,11 @@
} }
} }
}, },
"mkpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/mkpath/-/mkpath-1.0.0.tgz",
"integrity": "sha1-67Opd+evHGg65v2hK1Raa6bFhT0="
},
"move-concurrently": { "move-concurrently": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@ -7670,6 +7712,11 @@
} }
} }
}, },
"node-version-compare": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/node-version-compare/-/node-version-compare-1.0.1.tgz",
"integrity": "sha1-2Fv9IPCsreM1d/VmgscQnDTFUM0="
},
"nopt": { "nopt": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
@ -8111,6 +8158,28 @@
} }
} }
}, },
"plist": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
"integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
"requires": {
"base64-js": "1.2.0",
"xmlbuilder": "8.2.2",
"xmldom": "0.1.27"
},
"dependencies": {
"base64-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
"integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE="
},
"xmlbuilder": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
"integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M="
}
}
},
"portfinder": { "portfinder": {
"version": "1.0.13", "version": "1.0.13",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
@ -11567,7 +11636,6 @@
"version": "0.4.19", "version": "0.4.19",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
"integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=",
"dev": true,
"requires": { "requires": {
"sax": "1.2.4", "sax": "1.2.4",
"xmlbuilder": "9.0.4" "xmlbuilder": "9.0.4"
@ -11576,14 +11644,12 @@
"xmlbuilder": { "xmlbuilder": {
"version": "9.0.4", "version": "9.0.4",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz",
"integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8="
"dev": true
}, },
"xmldom": { "xmldom": {
"version": "0.1.27", "version": "0.1.27",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
"dev": true
}, },
"xmlhttprequest": { "xmlhttprequest": {
"version": "1.8.0", "version": "1.8.0",

View File

@ -1,5 +1,5 @@
{ {
"version": "3.0.3", "version": "3.1.0",
"name": "dynamicbible", "name": "dynamicbible",
"author": "Jason Wall", "author": "Jason Wall",
"homepage": "http://dynamicbible.com/", "homepage": "http://dynamicbible.com/",
@ -34,12 +34,18 @@
"@ionic/storage": "2.1.3", "@ionic/storage": "2.1.3",
"angularfire2": "^5.0.0-rc.4", "angularfire2": "^5.0.0-rc.4",
"cordova-android": "7.0.0", "cordova-android": "7.0.0",
"cordova-plugin-browsertab": "^0.2.0",
"cordova-plugin-buildinfo": "^2.0.1",
"cordova-plugin-compat": "^1.2.0",
"cordova-plugin-console": "^1.1.0", "cordova-plugin-console": "^1.1.0",
"cordova-plugin-crosswalk-webview": "^2.3.0", "cordova-plugin-crosswalk-webview": "^2.3.0",
"cordova-plugin-customurlscheme": "^4.3.0",
"cordova-plugin-device": "^1.1.7", "cordova-plugin-device": "^1.1.7",
"cordova-plugin-inappbrowser": "^2.0.1",
"cordova-plugin-splashscreen": "^4.1.0", "cordova-plugin-splashscreen": "^4.1.0",
"cordova-plugin-statusbar": "^2.4.1", "cordova-plugin-statusbar": "^2.4.1",
"cordova-plugin-whitelist": "^1.3.3", "cordova-plugin-whitelist": "^1.3.3",
"cordova-universal-links-plugin": "^1.2.1",
"firebase": "^4.8.0", "firebase": "^4.8.0",
"ionic-angular": "3.9.0", "ionic-angular": "3.9.0",
"ionic-plugin-keyboard": "^2.2.1", "ionic-plugin-keyboard": "^2.2.1",
@ -103,6 +109,16 @@
"XWALK_COMMANDLINE": "--disable-pull-to-refresh-effect", "XWALK_COMMANDLINE": "--disable-pull-to-refresh-effect",
"XWALK_MODE": "embedded", "XWALK_MODE": "embedded",
"XWALK_MULTIPLEAPK": "true" "XWALK_MULTIPLEAPK": "true"
},
"cordova-plugin-buildinfo": {},
"cordova-universal-links-plugin": {},
"cordova-plugin-browsertab": {},
"cordova-plugin-inappbrowser": {},
"cordova-plugin-customurlscheme": {
"URL_SCHEME": "com.firebase.cordova",
"ANDROID_SCHEME": " ",
"ANDROID_HOST": " ",
"ANDROID_PATHPREFIX": "/"
} }
}, },
"platforms": [ "platforms": [

View File

@ -55,6 +55,26 @@
{ {
"xml": "<feature name=\"Keyboard\"><param name=\"android-package\" value=\"io.ionic.keyboard.IonicKeyboard\" /><param name=\"onload\" value=\"true\" /></feature>", "xml": "<feature name=\"Keyboard\"><param name=\"android-package\" value=\"io.ionic.keyboard.IonicKeyboard\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1 "count": 1
},
{
"xml": "<feature name=\"BuildInfo\"><param name=\"android-package\" value=\"org.apache.cordova.buildinfo.BuildInfo\" /></feature>",
"count": 1
},
{
"xml": "<feature name=\"UniversalLinks\"><param name=\"android-package\" value=\"com.nordnetab.cordova.ul.UniversalLinksPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
},
{
"xml": "<feature name=\"BrowserTab\"><param name=\"android-package\" value=\"com.google.cordova.plugin.browsertab.BrowserTab\" /></feature>",
"count": 1
},
{
"xml": "<feature name=\"InAppBrowser\"><param name=\"android-package\" value=\"org.apache.cordova.inappbrowser.InAppBrowser\" /></feature>",
"count": 1
},
{
"xml": "<feature name=\"LaunchMyApp\"><param name=\"android-package\" value=\"nl.xservices.plugins.LaunchMyApp\" /></feature>",
"count": 1
} }
] ]
} }
@ -70,6 +90,16 @@
"xml": "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />", "xml": "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",
"count": 1 "count": 1
} }
],
"/manifest/application/activity": [
{
"xml": "<intent-filter><action android:name=\"android.intent.action.VIEW\" /><category android:name=\"android.intent.category.DEFAULT\" /><category android:name=\"android.intent.category.BROWSABLE\" /><data android:scheme=\"com.firebase.cordova\" /></intent-filter>",
"count": 1
},
{
"xml": "<intent-filter><action android:name=\"android.intent.action.VIEW\" /><category android:name=\"android.intent.category.DEFAULT\" /><category android:name=\"android.intent.category.BROWSABLE\" /><data android:host=\" \" android:pathPrefix=\"/\" android:scheme=\" \" /></intent-filter>",
"count": 1
}
] ]
} }
} }
@ -101,6 +131,25 @@
}, },
"ionic-plugin-keyboard": { "ionic-plugin-keyboard": {
"PACKAGE_NAME": "walljm.dynamicbible" "PACKAGE_NAME": "walljm.dynamicbible"
},
"cordova-plugin-buildinfo": {
"PACKAGE_NAME": "walljm.dynamicbible"
},
"cordova-universal-links-plugin": {
"PACKAGE_NAME": "walljm.dynamicbible"
},
"cordova-plugin-browsertab": {
"PACKAGE_NAME": "walljm.dynamicbible"
},
"cordova-plugin-inappbrowser": {
"PACKAGE_NAME": "walljm.dynamicbible"
},
"cordova-plugin-customurlscheme": {
"URL_SCHEME": "com.firebase.cordova",
"ANDROID_SCHEME": " ",
"ANDROID_HOST": " ",
"ANDROID_PATHPREFIX": "/",
"PACKAGE_NAME": "walljm.dynamicbible"
} }
}, },
"dependent_plugins": {}, "dependent_plugins": {},
@ -137,6 +186,47 @@
"cordova.plugins.Keyboard" "cordova.plugins.Keyboard"
], ],
"runs": true "runs": true
},
{
"id": "cordova-plugin-buildinfo.BuildInfo",
"file": "plugins/cordova-plugin-buildinfo/www/buildinfo.js",
"pluginId": "cordova-plugin-buildinfo",
"clobbers": [
"BuildInfo"
]
},
{
"id": "cordova-universal-links-plugin.universalLinks",
"file": "plugins/cordova-universal-links-plugin/www/universal_links.js",
"pluginId": "cordova-universal-links-plugin",
"clobbers": [
"universalLinks"
]
},
{
"id": "cordova-plugin-browsertab.BrowserTab",
"file": "plugins/cordova-plugin-browsertab/www/browsertab.js",
"pluginId": "cordova-plugin-browsertab",
"clobbers": [
"cordova.plugins.browsertab"
]
},
{
"id": "cordova-plugin-inappbrowser.inappbrowser",
"file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
"pluginId": "cordova-plugin-inappbrowser",
"clobbers": [
"cordova.InAppBrowser.open",
"window.open"
]
},
{
"id": "cordova-plugin-customurlscheme.LaunchMyApp",
"file": "plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js",
"pluginId": "cordova-plugin-customurlscheme",
"clobbers": [
"window.plugins.launchmyapp"
]
} }
], ],
"plugin_metadata": { "plugin_metadata": {
@ -146,6 +236,11 @@
"cordova-plugin-splashscreen": "4.1.0", "cordova-plugin-splashscreen": "4.1.0",
"cordova-plugin-statusbar": "2.4.1", "cordova-plugin-statusbar": "2.4.1",
"cordova-plugin-whitelist": "1.3.3", "cordova-plugin-whitelist": "1.3.3",
"ionic-plugin-keyboard": "2.2.1" "ionic-plugin-keyboard": "2.2.1",
"cordova-plugin-buildinfo": "2.0.1",
"cordova-universal-links-plugin": "1.2.1",
"cordova-plugin-browsertab": "0.2.0",
"cordova-plugin-inappbrowser": "2.0.1",
"cordova-plugin-customurlscheme": "4.3.0"
} }
} }

View File

@ -0,0 +1,7 @@
def minSdkVersion = 16
if(cdvMinSdkVersion == null) {
ext.cdvMinSdkVersion = minSdkVersion;
} else if (cdvMinSdkVersion.toInteger() < minSdkVersion) {
ext.cdvMinSdkVersion = minSdkVersion;
}

View File

@ -0,0 +1,5 @@
android {
defaultConfig {
buildConfigField "long", "_BUILDINFO_TIMESTAMP", System.currentTimeMillis() + "L"
}
}

View File

@ -32,6 +32,47 @@ module.exports = [
"cordova.plugins.Keyboard" "cordova.plugins.Keyboard"
], ],
"runs": true "runs": true
},
{
"id": "cordova-plugin-buildinfo.BuildInfo",
"file": "plugins/cordova-plugin-buildinfo/www/buildinfo.js",
"pluginId": "cordova-plugin-buildinfo",
"clobbers": [
"BuildInfo"
]
},
{
"id": "cordova-universal-links-plugin.universalLinks",
"file": "plugins/cordova-universal-links-plugin/www/universal_links.js",
"pluginId": "cordova-universal-links-plugin",
"clobbers": [
"universalLinks"
]
},
{
"id": "cordova-plugin-browsertab.BrowserTab",
"file": "plugins/cordova-plugin-browsertab/www/browsertab.js",
"pluginId": "cordova-plugin-browsertab",
"clobbers": [
"cordova.plugins.browsertab"
]
},
{
"id": "cordova-plugin-inappbrowser.inappbrowser",
"file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js",
"pluginId": "cordova-plugin-inappbrowser",
"clobbers": [
"cordova.InAppBrowser.open",
"window.open"
]
},
{
"id": "cordova-plugin-customurlscheme.LaunchMyApp",
"file": "plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js",
"pluginId": "cordova-plugin-customurlscheme",
"clobbers": [
"window.plugins.launchmyapp"
]
} }
]; ];
module.exports.metadata = module.exports.metadata =
@ -43,7 +84,12 @@ module.exports.metadata =
"cordova-plugin-splashscreen": "4.1.0", "cordova-plugin-splashscreen": "4.1.0",
"cordova-plugin-statusbar": "2.4.1", "cordova-plugin-statusbar": "2.4.1",
"cordova-plugin-whitelist": "1.3.3", "cordova-plugin-whitelist": "1.3.3",
"ionic-plugin-keyboard": "2.2.1" "ionic-plugin-keyboard": "2.2.1",
"cordova-plugin-buildinfo": "2.0.1",
"cordova-universal-links-plugin": "1.2.1",
"cordova-plugin-browsertab": "0.2.0",
"cordova-plugin-inappbrowser": "2.0.1",
"cordova-plugin-customurlscheme": "4.3.0"
}; };
// BOTTOM OF METADATA // BOTTOM OF METADATA
}); });

View File

@ -0,0 +1,34 @@
cordova.define("cordova-plugin-browsertab.BrowserTab", function(require, exports, module) {
/*
* Copyright 2016 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/
var exec = require('cordova/exec');
exports.isAvailable = function(success, error) {
exec(success, error, 'BrowserTab', 'isAvailable', []);
};
exports.openUrl = function(url, opt_error) {
var doNothing = function() {};
var error = (!opt_error) ? doNothing : opt_error;
exec(doNothing, error, 'BrowserTab', 'openUrl', [url]);
};
exports.close = function(opt_error) {
var doNothing = function() {};
var error = (!opt_error) ? doNothing : opt_error;
exec(doNothing, error, 'BrowserTab', 'close', []);
};
});

View File

@ -0,0 +1,127 @@
cordova.define("cordova-plugin-buildinfo.BuildInfo", function(require, exports, module) {
/*
The MIT License (MIT)
Copyright (c) 2016 Mikihiro Hayashi
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.
*/
var exec = require('cordova/exec');
var channel = require('cordova/channel');
module.exports = {
packageName: '',
basePackageName: '',
displayName: '',
name: '',
version: '',
versionCode: 0,
debug: false,
buildDate: '',
installDate: '',
buildType: '',
flavor: ''
};
channel.onCordovaReady.subscribe(function () {
// module.exports.init();
var args = [];
// Android Only
// defined buildInfoBuildConfigClassName variable
// BuildConfig class name.
// ex: <script>var buildInfoBuildConfigClassName = 'org.apache.cordova.sample.BuildConfig';</script>
if ('undefined' !== typeof buildInfoBuildConfigClassName) {
args.push(buildInfoBuildConfigClassName);
}
exec(
function (res) {
if (!res) {
return;
}
if ('undefined' !== typeof res.packageName) {
module.exports.packageName = res.packageName;
}
if ('undefined' !== typeof res.basePackageName) {
module.exports.basePackageName = res.basePackageName;
}
if ('undefined' !== typeof res.displayName) {
module.exports.displayName = res.displayName;
}
if ('undefined' !== typeof res.name) {
module.exports.name = res.name;
}
if ('undefined' !== typeof res.version) {
module.exports.version = res.version;
}
if ('undefined' !== typeof res.versionCode) {
module.exports.versionCode = res.versionCode;
}
if ('undefined' !== typeof res.debug) {
module.exports.debug = res.debug;
}
if ('undefined' !== typeof res.buildType) {
module.exports.buildType = res.buildType;
}
if ('undefined' !== typeof res.flavor) {
module.exports.flavor = res.flavor;
}
if ('undefined' !== typeof res.buildDate) {
if (res.buildDate instanceof Date) {
module.exports.buildDate = res.buildDate;
} else {
module.exports.buildDate = new Date(res.buildDate);
}
}
if ('undefined' !== typeof res.installDate) {
if (res.installDate instanceof Date) {
module.exports.installDate = res.installDate;
} else {
module.exports.installDate = new Date(res.installDate);
}
}
if ('undefined' !== typeof res.windows) {
module.exports.windows = res.windows;
}
},
function (msg) {
console.error('BuildInfo init fail');
console.error(msg);
},
'BuildInfo',
'init',
args
);
});
});

View File

@ -0,0 +1,49 @@
cordova.define("cordova-plugin-customurlscheme.LaunchMyApp", function(require, exports, module) {
(function () {
"use strict";
var remainingAttempts = 10;
function waitForAndCallHandlerFunction(url) {
if (typeof window.handleOpenURL === "function") {
// Clear the intent when we have a handler (note that this is only done when the preference 'CustomURLSchemePluginClearsAndroidIntent' is 'true' in config.xml
cordova.exec(
null,
null,
"LaunchMyApp",
"clearIntent",
[]);
window.handleOpenURL(url);
} else if (remainingAttempts-- > 0) {
setTimeout(function(){waitForAndCallHandlerFunction(url);}, 500);
}
}
function triggerOpenURL() {
cordova.exec(
waitForAndCallHandlerFunction,
null,
"LaunchMyApp",
"checkIntent",
[]);
}
document.addEventListener("deviceready", triggerOpenURL, false);
var launchmyapp = {
getLastIntent: function(success, failure) {
cordova.exec(
success,
failure,
"LaunchMyApp",
"getLastIntent",
[]);
}
}
module.exports = launchmyapp;
}());
});

View File

@ -0,0 +1,117 @@
cordova.define("cordova-plugin-inappbrowser.inappbrowser", function(require, exports, module) {
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
(function () {
// special patch to correctly work on Ripple emulator (CB-9760)
if (window.parent && !!window.parent.ripple) { // https://gist.github.com/triceam/4658021
module.exports = window.open.bind(window); // fallback to default window.open behaviour
return;
}
var exec = require('cordova/exec');
var channel = require('cordova/channel');
var modulemapper = require('cordova/modulemapper');
var urlutil = require('cordova/urlutil');
function InAppBrowser () {
this.channels = {
'loadstart': channel.create('loadstart'),
'loadstop': channel.create('loadstop'),
'loaderror': channel.create('loaderror'),
'exit': channel.create('exit')
};
}
InAppBrowser.prototype = {
_eventHandler: function (event) {
if (event && (event.type in this.channels)) {
this.channels[event.type].fire(event);
}
},
close: function (eventname) {
exec(null, null, 'InAppBrowser', 'close', []);
},
show: function (eventname) {
exec(null, null, 'InAppBrowser', 'show', []);
},
hide: function (eventname) {
exec(null, null, 'InAppBrowser', 'hide', []);
},
addEventListener: function (eventname, f) {
if (eventname in this.channels) {
this.channels[eventname].subscribe(f);
}
},
removeEventListener: function (eventname, f) {
if (eventname in this.channels) {
this.channels[eventname].unsubscribe(f);
}
},
executeScript: function (injectDetails, cb) {
if (injectDetails.code) {
exec(cb, null, 'InAppBrowser', 'injectScriptCode', [injectDetails.code, !!cb]);
} else if (injectDetails.file) {
exec(cb, null, 'InAppBrowser', 'injectScriptFile', [injectDetails.file, !!cb]);
} else {
throw new Error('executeScript requires exactly one of code or file to be specified');
}
},
insertCSS: function (injectDetails, cb) {
if (injectDetails.code) {
exec(cb, null, 'InAppBrowser', 'injectStyleCode', [injectDetails.code, !!cb]);
} else if (injectDetails.file) {
exec(cb, null, 'InAppBrowser', 'injectStyleFile', [injectDetails.file, !!cb]);
} else {
throw new Error('insertCSS requires exactly one of code or file to be specified');
}
}
};
module.exports = function (strUrl, strWindowName, strWindowFeatures, callbacks) {
// Don't catch calls that write to existing frames (e.g. named iframes).
if (window.frames && window.frames[strWindowName]) {
var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
return origOpenFunc.apply(window, arguments);
}
strUrl = urlutil.makeAbsolute(strUrl);
var iab = new InAppBrowser();
callbacks = callbacks || {};
for (var callbackName in callbacks) {
iab.addEventListener(callbackName, callbacks[callbackName]);
}
var cb = function (eventname) {
iab._eventHandler(eventname);
};
strWindowFeatures = strWindowFeatures || '';
exec(cb, cb, 'InAppBrowser', 'open', [strUrl, strWindowName, strWindowFeatures]);
return iab;
};
})();
});

View File

@ -0,0 +1,59 @@
cordova.define("cordova-universal-links-plugin.universalLinks", function(require, exports, module) {
var exec = require('cordova/exec'),
channel = require('cordova/channel'),
// Reference name for the plugin
PLUGIN_NAME = 'UniversalLinks',
// Default event name that is used by the plugin
DEFAULT_EVENT_NAME = 'didLaunchAppFromLink';
// Plugin methods on the native side that can be called from JavaScript
pluginNativeMethod = {
SUBSCRIBE: 'jsSubscribeForEvent',
UNSUBSCRIBE: 'jsUnsubscribeFromEvent'
};
var universalLinks = {
/**
* Subscribe to event.
* If plugin already captured that event - callback will be called immidietly.
*
* @param {String} eventName - name of the event you are subscribing on; if null - default plugin event is used
* @param {Function} callback - callback that is called when event is captured
*/
subscribe: function(eventName, callback) {
if (!callback) {
console.warn('Universal Links: can\'t subscribe to event without a callback');
return;
}
if (!eventName) {
eventName = DEFAULT_EVENT_NAME;
}
var innerCallback = function(msg) {
callback(msg.data);
};
exec(innerCallback, null, PLUGIN_NAME, pluginNativeMethod.SUBSCRIBE, [eventName]);
},
/**
* Unsubscribe from the event.
*
* @param {String} eventName - from what event we are unsubscribing
*/
unsubscribe: function(eventName) {
if (!eventName) {
eventName = DEFAULT_EVENT_NAME;
}
exec(null, null, PLUGIN_NAME, pluginNativeMethod.UNSUBSCRIBE, [eventName]);
}
};
module.exports = universalLinks;
});

View File

@ -12,3 +12,6 @@ target=android-26
android.library.reference.1=CordovaLib android.library.reference.1=CordovaLib
android.library.reference.2=app android.library.reference.2=app
cordova.gradle.include.1=cordova-plugin-crosswalk-webview/dynamicbible-xwalk.gradle cordova.gradle.include.1=cordova-plugin-crosswalk-webview/dynamicbible-xwalk.gradle
cordova.gradle.include.2=cordova-plugin-buildinfo/dynamicbible-BuildInfo.gradle
cordova.system.library.1=com.android.support:customtabs:23.3.0
cordova.gradle.include.3=cordova-plugin-browsertab/dynamicbible-BrowserTab.gradle

View File

@ -18,7 +18,7 @@ export const DEFAULT_USER_NAME = 'john_doe';
export type User = { export type User = {
username: string, username: string,
uid: string|null, uid: string | null,
strongs_modal: boolean, strongs_modal: boolean,
clear_search_after_query: boolean, clear_search_after_query: boolean,
items: CardItem[], items: CardItem[],
@ -34,28 +34,39 @@ export type SavedPage = {
title: string, title: string,
} }
@Injectable() @Injectable()
export class ProfileService { export class ProfileService
{
localProfile: User; localProfile: User;
remoteProfile: fbObject<User> | null; remoteProfile: fbObject<User> | null;
remoteLoggedIn: boolean;
isWeb: boolean;
constructor( constructor(
private local: Storage private local: Storage
, private db: AngularFireDatabase , private db: AngularFireDatabase
, public fbAuth: AngularFireAuth , public firebaseAuth: AngularFireAuth
) )
{ {
this.isWeb = (document.URL.startsWith('http') || !document.URL.startsWith('http://localhost:8080'));
console.log('Setting up default user initially'); console.log('Setting up default user initially');
this.fbAuth.authState.subscribe(state => this.subscribeToRemoteProfile(db, state));
let localObserver = this.userObserver().subscribe( let localObserver = this.userObserver().subscribe(
user => { user =>
{
this.update(user); this.update(user);
this.localProfile = user; this.localProfile = user;
}, },
error => console.log(error)); error => console.log(error)
);
this.firebaseAuth.authState.subscribe(state => this.subscribeToRemoteProfile(this.db, state));
} }
userObserver(): Observable<User> { userObserver(): Observable<User>
return Observable.fromPromise(this.local.get('profile')).map(json_profile => { {
return Observable.fromPromise(this.local.get('profile')).map(json_profile =>
{
let t = this.profile(); let t = this.profile();
if (json_profile !== null) t = JSON.parse(json_profile); if (json_profile !== null) t = JSON.parse(json_profile);
@ -63,13 +74,14 @@ export class ProfileService {
}); });
} }
profile(): User { profile(): User
{
if (!this.localProfile) if (!this.localProfile)
{ {
console.log('Initializing default user'); console.log('Initializing default user');
this.localProfile = ProfileService.createDefaultUser(); this.localProfile = ProfileService.createDefaultUser();
} }
console.log('Returning Profile with user: ' + this.localProfile);
return this.localProfile return this.localProfile
} }
@ -91,15 +103,27 @@ export class ProfileService {
handleRemotePreferenceChange(user: User) handleRemotePreferenceChange(user: User)
{ {
if (user) { if (user)
{
console.log('handling remote settings for user %s', user.username); console.log('handling remote settings for user %s', user.username);
if (!user.saved_pages) user.saved_pages = []; if (!user.saved_pages) user.saved_pages = [];
if (!user.items) user.items = [];
// merge the items and the saved_pages, so they don't loose anything.
if (this.localProfile.items.length > 0)
user.items.concat(this.localProfile.items);
if (this.localProfile.saved_pages.length > 0)
user.saved_pages.concat(this.localProfile.saved_pages);
this.localProfile = user; this.localProfile = user;
console.log('Stashed remote changes locally'); console.log('Stashed remote changes locally');
// We only save the local change here since this is an update from our remote profile. // We only save the local change here since this is an update from our remote profile.
this.localSave(); this.localSave();
console.log('Saved remote changes locally'); console.log('Saved remote changes locally');
} else { }
else
{
// No user is there so we should save our local to the remote. // No user is there so we should save our local to the remote.
console.log('Saving local to remote for user %s', user.username); console.log('Saving local to remote for user %s', user.username);
this.save() this.save()
@ -109,17 +133,38 @@ export class ProfileService {
currentUser(): firebase.User currentUser(): firebase.User
{ {
return this.fbAuth.auth.currentUser; return this.firebaseAuth.auth.currentUser;
} }
authenticate() authenticate()
{ {
this.fbAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider()); let self = this;
let provider = new firebase.auth.GoogleAuthProvider();
if (this.isWeb)
{
this.firebaseAuth.auth.signInWithPopup(provider);
}
else
{
firebase.auth().signInWithRedirect(provider).then(function ()
{
return firebase.auth().getRedirectResult();
}).catch(function (error)
{
// Handle Errors here.
console.log(error);
});
}
this.firebaseAuth.authState.subscribe(state => this.subscribeToRemoteProfile(this.db, state));
this.remoteLoggedIn = true;
} }
logout() logout()
{ {
this.fbAuth.auth.signOut(); this.firebaseAuth.auth.signOut(); // sign out
this.remoteProfile = null; // inform the profile service not to bother
this.remoteLoggedIn = false;
} }
private localSave() private localSave()
@ -132,7 +177,8 @@ export class ProfileService {
// First we save our local copy of the settings. // First we save our local copy of the settings.
this.localSave(); this.localSave();
// If we have a remote profile then save it there too // If we have a remote profile then save it there too
if (this.remoteProfile) { if (this.remoteProfile)
{
console.log('Saving remote settings profile for remote user id ' + this.profile().uid); console.log('Saving remote settings profile for remote user id ' + this.profile().uid);
this.remoteProfile.ref.set(this.profile()); this.remoteProfile.ref.set(this.profile());
} }

View File

@ -0,0 +1,25 @@
<!--
Besides activating Deep Links in the application - you need to enable indexing for your web pages.
For that you should add <link /> tags in the <head> section of the web pages that you specified in config.xml.
Doing so, you declare that this page should be openned in the mobile application instead of the browser.
Link tag is look like this:
<link rel="alternate" href="android-app://<package_name>/<scheme>/<host>/<path>" />
More documentation could be found here:
https://developer.android.com/training/app-indexing/enabling-app-indexing.html
For convenience, plugin generates the list of <link /> tags based on what you specified in the config.xml.
You can just copy-paste them in the <header> section of the appropriate pages of your website.
-->
<head>
<link rel="alternate" href="android-app://walljm.dynamicbible/https/bhgx5.app.goo.gl/XktS" />
<link rel="alternate" href="android-app://walljm.dynamicbible/https/dynamicbible-7c6cf.firebaseapp.com/__/auth/callback" />
<!-- Your other stuff from the head tag -->
</head>
<body>
<!-- Your page content -->
</body>

View File

@ -1,9 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<script data-ionic="inject">
(function(w){var i=w.Ionic=w.Ionic||{};i.version='3.9.0';i.angular='5.0.0';i.staticDir='build/';})(window);
</script>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Dynamic Bible</title> <title>Dynamic Bible</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">

4
build_android_debug.bat Normal file
View File

@ -0,0 +1,4 @@
cd DynamicBibleIonic
call ionic cordova build android -- --buildConfig=./build.json
cd ..
copy DynamicBibleIonic\platforms\android\app\build\outputs\apk\armv7\debug\app-armv7-debug.apk DynamicBible-%1.apk /Y