I'm implementing Dan Wilson's Google-Analytics-Plugin into my Cordova/Ionic application and am getting an odd error. I installed the latest version (1.8.2) of the plugin and implemented it into my app.js:
if (typeof window.ga !== "undefined") {
window.ga.startTrackerWithId('UA-84899403-18');
window.ga.trackView('Home');
}
The condition passes and the code is run, but the console output looks like this:
There isn't any data in my Google Analytics App Overview but I know it can take a while for that to come in. I've never seen this missing exc: and it isn't an error so I can't tell if the plugin is working or not. Any help?
This is a Ripple Emulator issue with the lack of ability to use native Java/Swift code, hence the missing exec:. In order to fix or properly test the app with the plugin you need to install it in a better emulator or on a device.
Related
I'm using the package react-native-image-resizer for image resize and optimization. The android platform is working well, but in iOS I'm getting null when calling the function.
I've done already, package re-install, re-link, version-downgrade, deleting node_modules and I don't know what else to do. I'm losing my mind. The codebase works excellent on Android but on iOS doesn't. The package is supposed to work on both platforms.
Ok, so my code pretty much goes like this, just as in the package tutorial:
ImageResizer.createResizedImage(data.uri, 800, 600, 'JPEG', 80);
Ive deleted the '.then' part of the code to see the yellow debug box on the phone. It prints a null is not an object right in the method call.
data.uri is my path, it prints the following format:
file:///var/mobile/Containers/Data/Application/02CF62B9-2372-40E9-BC3B-3CA18C/Library/Caches/Camera/C327A9AC-49A4-A5BF-21313CEC14E4.jpg
I don't really see where the null is.
I just want the issue to go away, I've deleted some lines of code inside the method, expecting this to work, but just with calling the method, it does not.
The null error is occurring when it evaluates the function createResizedImage.
If you've just installed the Resizer package, make sure you have run pod install in your ios directory, and you need to close and restart the server/simulator otherwise you will see this error.
Ok, so found the solution which is weird. I created the same project with all global and local dependencies up to date. When I say the same project, I mean the same .js files. That was it, the project now fully works with android and iOS.
I am using the latest version of Meteor js. I am a newbie and couldn't find the solution. I have surfed for this problem a lot.
Before going to the problem, please have look at the directory structure first.
My directory structure of the project is like this :
\client
\main.html
\main.css
\main.js
\imports
\lib
\todos
\todos.js
\server
\main.js
I have created a Mongo Object in todos.js.
export const Todos = new Mongo.Collections('todos');
This is working fine.
Now in client\main.js, I am importing this object,
import { Todos } from '\imports\lib\todos\todos.js';
Note: I tried relative and absolute both type of addressing.
I put a debugger after that and checked and the variable is there. I can access that variable on the console. But as soon as I pass the statement and all the code is rendered on the browser(google chrome), I am not able to use Todos. It is giving me a ReferenceError. The error is
Todos is not defined.
I know there is no problem till the browser is loading because I checked that. I have surfed a lot. Please help me.
Thank you in advance.
Edit 1: I am using windows 7 if that is necessary.
As the comments above said, variables declared or imported in a file/module don't end up on the developers console.
What you can do to get stuff on the console is import it to the console using require
> require('/imports/lib/todos/todos.js')
Any valid absolute path or package will work here
Note: the path separators are always *nix style /
I had a similar problem while trying to evaluate moment from Moment.js in Chrome console. It was imported by the script being debugged/under breakpoints but does not work in console. import or require Moment.js in console gave me errors and did not work for me.
I ended up switching to Firefox Developer Edition, where I can put breakpoints and then evaluate moment in its console out of the box without any problems.
It's been 5 hours i'm struggling with Meteor.
I want to get Geolocation.latLng(). It works perfectly on my browser, I coupled it with GoogleMaps to put a marker on a map. I'm following this example and didn't touch it much.
When I compile on iOS the Geolocation returns weird errors on my simulator (iPhone 6 / iOS 8.3) such as Geolocation failed : Position retrieval timed out, sometimes it's another one which's very similar (note : it asks me if i want to share my location when i launch the app, and i accept)
Sometimes it says it just compiled and I get an old version of my app too.
What's happening ? Is it me or it's really THAT buggy once you try to make a real world project ?
This to-do list tutorial looked very magic but once you understood how it works and you try something real, it's kind of disappointing ... Sounds very unstable and not ready.
Don't hesitate to tell me if i'm doing something wrong ;)
UPDATE : i've searched a lot more and i'm now trying to setup differently the timeout limit of the geolocation package to avoid this error.
Sadly, i realized timeout : Infinity is the default value of the source : sounds like an issue.
Nothing is working so far. If anyone has an idea, let me know on that too ...
I finally made it work. First I realized you have to setup the accessRule thank to Lucas's answer but it wasn't enough.
// In a mobile-config.js in the project
App.accessRule('*://maps.googleapis.com/*');
The iOS Simulator provided by Apple seems to have bugs : the position isn't retrieved correctly, or not at all. It's only working if i set the the Debug > Location to City Ride ; even Apple wasn't working properly on my hand.
If nothing works for you, just try all the possible Location, it might be the problem.
Have you define an accessRule in your mobile-config.js? If not, try this.
App.accessRule('*://maps.googleapis.com/*');
Here, clone this sample app I put together a while back:
https://github.com/ffxsam/whats-nearby
It works on desktop as well as mobile. All you have to do is add a settings.json and add your Google Places API key in there.
{
"apiKey": "...."
}
Running Meteor 1.1.6 with Materialize 0.96.1 and having no issues until I start up meteor one morning and get a white screen. Console (firebug) says:
SyntaxError: unterminated string literal
var c = "input[type=text], input[type=passw
found in the generated file materialize_materialize.js
Stepping back in version history I can't seem to find anything glaring that I changed which might be the culprit. Looking at the source code I found the code respective code but the line is actually terminated:
var c = "input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";
Anyone else ever see this issue, or have any ideas on how to fix it?
Update: Seems that Meteor is generating the file just fine but stops mid-string in the above error. After the string cut off, the file continues with:
/* Exports */
if (typeof Package === 'undefined') Package = {};
Package['materialize:materialize'] = {
Materialize: Materialize
};
})();
Oddly enough, this does not happen on my coworker's machine (he's using OSX 10.10.3, while I'm on Windows 7).
2nd Update: Also tested this issue on an Ubuntu 14.04 VM, and there were no issues - the app ran just fine. Thinking it might have something to do with the Meteor version on Windows, I blew away my install, downloaded the installer, and re-installed Meteor on my machine. What d'ya know, it worked.
Not going to mark this with an actual answer yet as I do not know what the cause of the issue is, other than something went wrong with Meteor itself - I think.
Make sure you add a SASS package. I suggest fourseven:scss
Also, you could use poetic:materialize-scss instead of materialize:materialize.
I can't come up with a good explanation for this, but when I include
<script type="text/javascript" src="phonegap.js"></script>
In my Phonegap app, which I have not modified, 2 pops will appear on screen.
//The first popup
gap:["PluginManager","startup","PluginManager224542697"]
//the second
gap:["App","show","App224542698"]
I have to cancel both popups and would really love to understand the reasoning.
The two lines in question are on line 21117 and 21118 of phonegap.js
// Tell the native code that a page change has occurred.
require('cordova/exec')(null, null, 'PluginManager', 'startup', []);
require('cordova/channel').onNativeReady.fire();
This of course does not break when its in the app, but it does mean that development is next to impossible.
For me the issue was occurring because phonegap.js was falling back to PROMPT based mode when running outside of phonegap. I believe this mode is intended for phonegap below Android 3.2, where all communication is via alert prompts (which is what you're seeing).
I fixed the problem by setting the following variable before loading phonegap.js:
window._cordovaNative = true;
This tricks phonegap into thinking you're running above phonegap 3.2 hence never enters Prompt mode.
Of course, if you're targeting devices below 3.2 then doing this will probably break all communication with Phonegap on those devices...
I have stumbled upon this error and question while trying the following:
Completed the hello world tutorial with cordova create, etc.
Deployed both on emulator and the connected device w/o a problem.
I got the same error as OP when doing cordova serve and just navigating to //localhost:8000 as instructed.
I agree - seeing those alerts is super annoying. It kills the whole point of speedy non-native js-based development.
What is going wrong?
Communication API with the "device" is falling back to this handler promptbasednativeapi.js (also see cordova-js/src/android/exec.js). On version 3.x.x just saying
window._cordovaNative = true;
was not enough for me. One should implement the whole protocol of communication.
Quick solution
You can use some browser side "emulator", e.g. Ripple emulator extension for chrome ([UPDATE] Consider using https://github.com/apache/incubator-ripple for phonegap 3.x.x as pointed by DuKes0mE). Such an "emulator" can understand and fire respective events, e.g. "device ready". So far it looks promising :-)
What is going on?
An answer by #antscode was of great help. After some digging and reading of cordova/cordova-js code I figured out that
Error comes from the mechanism which is a part of cordova plugin architecture. Plugins are developed as so called cordova commands which can be executed from js - this is exactly how cordova architecture is organized.
Cordova is a JS framework. One is suggested to primary write (non-native) JS code. To talk to all those different native plugins one has to come up with the protocol to communicate with them, sort of RPC with JSON serialization. This is exactly what is going own.
Plugins can be also in pure JS. To quote the manual
Create a new echome plugin with:
window.echo = function(str, callback) {
cordova.exec(callback, function(err) {
callback('Nothing to echo.');
}, "Echo", "echo", [str]);
};
Access it as a cordova command via JS:
window.echo("echome", function(echoValue) {
alert(echoValue == "echome"); // should alert true.
});
No emulator solution
I could imagine a situation when an rather complicated app will break just inside such an web-browser client side "emulator" (and only in it). A better solution would be to figure out a way to convince the app not to fallback to PROMPT method of communication (the one that makes annoying alerts). Well, I do not have such a solution right now :-( Will be happy to learn how to do it though.
Solution is here: https://gist.github.com/ewiger/7d5e0cc8fccf311e9ce2
there is probably no return event for the cancel button. if no instructions are passed to the kernel, this results in an exception(your browser crashing.) try defining an action for the cancel button and see if that helps.
I went into hello/platforms/ios/CordovaLib and copied the cordova.js file into my www root and changed
Or download from here:https://github.com/apache/cordova-ios/blob/master/CordovaLib/cordova.js
<script type="text/javascript" src="phonegap.js"></script>
to
<script type="text/javascript" src="cordova.js"></script>
and no more popups
I was having the same issue with a project created by another developer. The cause in my case was the remains of the Cordova/PhoneGap 2.x configuration. This popup is related to the plugin system. Removing plugin from my config.xml made it better:
<plugin name="InAppBrowser" value="org.apache.cordova.InAppBrowser" />
The end, I decided it would be best to make a new 3.x project and move all of my HTML/CSS/JS to the newly created project. The new project fixed all issues.
I had initially resisted posting an answer on this question. As was mentioned by one of the developers that the phonegap.js should not be included unless it is production code.
This however means you can't tests phonegap features.
To briefly explain my thought process, in all my years developing (php) I have often set global variables that I can easily write code for dev, stage or production.
Please consider this might not be the best way to go, but for me it works and I'm enjoying the rest of my backbone app far more than revisiting this currently ;)
So, I did this:
//Define SD
var SD = {}; //define SD so we can use it globally
/*==================================================
Is Mobile - If true then we are a mobile
================================================== */
SD.isMobile = true;
//This is with the assumtion that your domain contains (for exmaple) http://yourdomain.local
if (document.URL.indexOf("local") > 0 || document.URL.indexOf("sex") > 0) {
SD.isMobile = false;
}
SD = {
isMobile: SD.isMobile,
ENVIROMENT: 'liveApp',
CDN: 'yoururl.com/',
HTTP: 'http://yoururl.com/',
}
// #define the globals depending on where we are -----------------------------------------------------
SD.globals = function () {
switch (window.location.hostname) {
case "sd.local":
SD.ENVIROMENT = 'localApp',
SD.CDN = 'sd.local/',
SD.HTTP = 'http://yoururl.com/',
SD.AJAX = SD.HTTP+'app/';
break;
case "192.168.0.25": //Set to your machines IP address
SD.ENVIROMENT = 'mobilePhone',
SD.AJAX = SD.HTTP+ 'app/';
break;
default:
SD.AJAX = SD.HTTP+'app/';
break;
}
};
And now finally, after all the init work I add the phonegap.js if we need it.
if(SD.isMobile){
$.getScript('phonegap.js', function( data, textStatus, jqxhr){
c( "cordova was loaded." );
});
I was experiencing the exact same two popups you describe but only experienced them when i added iOS to my phonegap project. the first time i did this i copied the www folder from my working Android app. this was the problem because it had artifacts from the Android plugins. After blasting and recreating the iOS app in the phonegap project using the command line tools i more carefully brought over only the needed html, js and css files for my app which resolved the issue.