Checking if a survey is opened via mobile device?

More
5 months 3 days ago #168679 by DanielVN
DanielVN created the topic: Checking if a survey is opened via mobile device?
Hi,

I have a request from a client that wants to make sure that the a potential survey will be opened only via mobile device. If not we should screen out the respondents.

Could you please advise if there is any solution for this?

Thank you very much in advance.

Best regrads
Daniel

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168680 by tpartner
tpartner replied the topic: Checking if a survey is opened via mobile device?
Define "mobile device". That's a moving target now. For example a Surface Pro is both a tablet and a PC/laptop. You may be better to target screen sizes.

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168682 by DanielVN
DanielVN replied the topic: Checking if a survey is opened via mobile device?
Hi Tony,

For this particular survey we should consider only mobile phones as mobile device.
Just to add i'm using lime version 2.73.

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168683 by DenisChenu
DenisChenu replied the topic: Checking if a survey is opened via mobile device?
Tony are right,

Else :
- Included javascript solution : github.com/LimeSurvey/LimeSurvey/tree/ma...answer/shortfreetext
- PHP solution (need little update for 3.X) gitlab.com/SondagesPro/findUserAgentInfo

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168685 by orvil
orvil replied the topic: Checking if a survey is opened via mobile device?
You will find a jQuery solution here, working in most cases to my experience:
detectmobilebrowsers.com/

Hint: add this to DenisChenu's script addon in an hidden equation question at the beginning of the survey

jQuery code:
/**
 * jQuery.browser.mobile (http://detectmobilebrowser.com/)
 *
 * jQuery.browser.mobile will be true if the browser is a mobile device
 *
 **/
(function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);

There is also a php version avaliable on the page I've mentioned. This could be integrated into the em_expression-helper.php =>@tpartner this brings me back to the idea of an update save extendable em_expression_helper :)

Best regards/Beste Grüße,
O. Villani

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168689 by Joffm
Joffm replied the topic: Checking if a survey is opened via mobile device?
Hi, here is another JS solution
<script type="text/javascript" charset="utf-8">
	/**
	 *JavaScript Client Detection
	 * (C) viazenetti GmbH (Christian Ludwig)
	 */
	(function (window) {
		{
			var unknown = '-';
 
			// screen
			var screenSize = '';
			if (screen.width) {
				width = (screen.width) ? screen.width : '';
				height = (screen.height) ? screen.height : '';
				screenSize += '' + width + " x " + height;
			}
var vpw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); 
var vph = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 
			// browser
			var nVer = navigator.appVersion;
			var nAgt = navigator.userAgent;
			var browser = navigator.appName;
			var version = '' + parseFloat(navigator.appVersion);
			var majorVersion = parseInt(navigator.appVersion, 10);
			var nameOffset, verOffset, ix;
 
			// Opera
			if ((verOffset = nAgt.indexOf('Opera')) != -1) {
				browser = 'Opera';
				version = nAgt.substring(verOffset + 6);
				if ((verOffset = nAgt.indexOf('Version')) != -1) {
					version = nAgt.substring(verOffset + 8);
				}
			}
			// Opera Next
			if ((verOffset = nAgt.indexOf('OPR')) != -1) {
				browser = 'Opera';
				version = nAgt.substring(verOffset + 4);
			}
			// MSIE
			else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
				browser = 'Microsoft Internet Explorer';
				version = nAgt.substring(verOffset + 5);
			}
			// Chrome
			else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {
				browser = 'Chrome';
				version = nAgt.substring(verOffset + 7);
			}
			// Safari
			else if ((verOffset = nAgt.indexOf('Safari')) != -1) {
				browser = 'Safari';
				version = nAgt.substring(verOffset + 7);
				if ((verOffset = nAgt.indexOf('Version')) != -1) {
					version = nAgt.substring(verOffset + 8);
				}
			}
			// Firefox
			else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
				browser = 'Firefox';
				version = nAgt.substring(verOffset + 8);
			}
			// MSIE 11+
			else if (nAgt.indexOf('Trident/') != -1) {
				browser = 'Microsoft Internet Explorer';
				version = nAgt.substring(nAgt.indexOf('rv:') + 3);
			}
			// Other browsers
			else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
				browser = nAgt.substring(nameOffset, verOffset);
				version = nAgt.substring(verOffset + 1);
				if (browser.toLowerCase() == browser.toUpperCase()) {
					browser = navigator.appName;
				}
			}
			// trim the version string
			if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
			if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
			if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);
 
			majorVersion = parseInt('' + version, 10);
			if (isNaN(majorVersion)) {
				version = '' + parseFloat(navigator.appVersion);
				majorVersion = parseInt(navigator.appVersion, 10);
			}
 
			// mobile version
			var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);
 
			// cookie
			var cookieEnabled = (navigator.cookieEnabled) ? true : false;
 
			if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {
				document.cookie = 'testcookie';
				cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
			}
 
			// system
			var os = unknown;
			var clientStrings = [
				{ s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/ },
				{ s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/ },
				{ s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/ },
				{ s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/ },
				{ s:'Windows Vista', r:/Windows NT 6.0/ },
				{ s:'Windows Server 2003', r:/Windows NT 5.2/ },
				{ s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/ },
				{ s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/ },
				{ s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/ },
				{ s:'Windows 98', r:/(Windows 98|Win98)/ },
				{ s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/ },
				{ s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/ },
				{ s:'Windows CE', r:/Windows CE/ },
				{ s:'Windows 3.11', r:/Win16/ },
				{ s:'Android', r:/Android/ },
				{ s:'Open BSD', r:/OpenBSD/ },
				{ s:'Sun OS', r:/SunOS/ },
				{ s:'Linux', r:/(Linux|X11)/ },
				{ s:'iOS', r:/(iPhone|iPad|iPod)/ },
				{ s:'Mac OS X', r:/Mac OS X/ },
				{ s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },
				{ s:'QNX', r:/QNX/ },
				{ s:'UNIX', r:/UNIX/ },
				{ s:'BeOS', r:/BeOS/ },
				{ s:'OS/2', r:/OS\/2/ },
				{ s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ }
			];
			for (var id in clientStrings) {
				var cs = clientStrings[id];
				if (cs.r.test(nAgt)) {
					os = cs.s;
					break;
				}
			}
 
			var osVersion = unknown;
 
			if (/Windows/.test(os)) {
				osVersion = /Windows (.*)/.exec(os)[1];
				os = 'Windows';
			}
 
			switch (os) {
				case 'Mac OS X':
					osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
					break;
 
				case 'Android':
					osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
					break;
 
				case 'iOS':
					osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
					osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
					break;
			}
 
			// flash (you'll need to include swfobject)
			/* script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" */
			var flashVersion = 'no check';
			if (typeof swfobject != 'undefined') {
				var fv = swfobject.getFlashPlayerVersion();
				if (fv.major > 0) {
					flashVersion = fv.major + '.' + fv.minor + ' r' + fv.release;
				}
				else  {
					flashVersion = unknown;
				}
			}
		}
 
		window.jscd = {
			screen: screenSize,
			browser: browser,
			browserVersion: version,
			browserMajorVersion: majorVersion,
			mobile: mobile,
			os: os,
			osVersion: osVersion,
			cookies: cookieEnabled,
			flashVersion: flashVersion,
            vieww : vpw,
            viewh: vph
		};
	}(this));
 
 
	$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
		'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' +
		'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion +
		  ' (' + jscd.browserVersion + ')\n' + 
		'Mobile: ' + jscd.mobile + '\n' +
		'Flash: ' + jscd.flashVersion + '\n' +
		'Cookies: ' + jscd.cookies + '\n' +
		'Viewport width: ' + jscd.vieww + '\n' +
		'Viewport heigth: ' + jscd.viewh + '\n' +
		'Screen Size: ' + jscd.screen + '\n\n' +
		'Full User Agent: ' + navigator.userAgent
		);
    });
</script>

You can check for the "jscd.mobile" or the viewport or screensize.

Joffm


Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168690 by DanielVN
DanielVN replied the topic: Checking if a survey is opened via mobile device?
Thank you all for your help.

I'm afraid that i might need some step by step guidance in order to implement this in the survey.

Thank you very much in advance.

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168693 by orvil
orvil replied the topic: Checking if a survey is opened via mobile device?
Hi DanielVN,

may I ask for the version of LS you are working with? Will help for step-by-step :)

Best regards/Beste Grüße,
O. Villani

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168694 by DanielVN
DanielVN replied the topic: Checking if a survey is opened via mobile device?
Hi Orvil,

I'm using version 2.73.0+171219 :)

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168697 by Joffm
Joffm replied the topic: Checking if a survey is opened via mobile device?
Hi, Daniel,
here is a working example.

If there are any questions about the equation, don't hesitate to ask.

Joffm

File Attachment:

File Name: limesurvey...4985.lss
File Size:25 KB


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Attachments:

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168701 by DenisChenu
DenisChenu replied the topic: Checking if a survey is opened via mobile device?

orvil wrote: Hint: add this to DenisChenu's script addon in an hidden equation question at the beginning of the survey

My solution is done without javascript , with hidden (totally, not by css or javascript).

Done with PHP Server var :)

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168702 by orvil
orvil replied the topic: Checking if a survey is opened via mobile device?
Hi,

simplest way:

A - decide which info is required

1.) create a new question (textarea)
2.) use the "Source" button in the Question editor
3.) copy and paste joffm's script (it gives you more information than mine) into the editor area
3) save the question an run it

You will see something like this:
 
OS: Windows 7
Browser: Chrome 66 (66.0.3359.170)
Mobile: false
Flash: no check
Cookies: true
Viewport width: 2691
Viewport heigth: 1612
Screen Size: 3072 x 1728
 
Full User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36

B - if necessary delete the lines not necessary. E.g. if you only need the mobile flag, reduce the part of the script (at the end)
...
...
 
$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
		'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' +
		'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion +
		  ' (' + jscd.browserVersion + ')\n' + 
		'Mobile: ' + jscd.mobile + '\n' +
		'Flash: ' + jscd.flashVersion + '\n' +
		'Cookies: ' + jscd.cookies + '\n' +
		'Viewport width: ' + jscd.vieww + '\n' +
		'Viewport heigth: ' + jscd.viewh + '\n' +
		'Screen Size: ' + jscd.screen + '\n\n' +
		'Full User Agent: ' + navigator.userAgent
		);
    });

to:
...
...
$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
 
		jscd.mobile;
		);
    });
 

Best regards/Beste Grüße,
O. Villani

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168703 by DanielVN
DanielVN replied the topic: Checking if a survey is opened via mobile device?
Awesome :) Thanks a lot to all of you.

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168704 by orvil
orvil replied the topic: Checking if a survey is opened via mobile device?
Hi,

simplest way:

A - decide which info is required

1.) create a new question (textarea)
2.) use the "Source" button in the Question editor
3.) copy and paste joffm's script (it gives you more information than mine) into the editor area
3) save the question an run it

You will see something like this:
 
OS: Windows 7
Browser: Chrome 66 (66.0.3359.170)
Mobile: false
Flash: no check
Cookies: true
Viewport width: 2691
Viewport heigth: 1612
Screen Size: 3072 x 1728
 
Full User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36

B - delete the output not necessary for you. E.g. if you only need the mobile flag, reduce the part of the script (at the end)
...
...
 
$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
		'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' +
		'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion +
		  ' (' + jscd.browserVersion + ')\n' + 
		'Mobile: ' + jscd.mobile + '\n' +
		'Flash: ' + jscd.flashVersion + '\n' +
		'Cookies: ' + jscd.cookies + '\n' +
		'Viewport width: ' + jscd.vieww + '\n' +
		'Viewport heigth: ' + jscd.viewh + '\n' +
		'Screen Size: ' + jscd.screen + '\n\n' +
		'Full User Agent: ' + navigator.userAgent
		);
    });

to:
...
...
$(document).ready(function() {	
 
		// Hide this question (remove double slash below to hide)
		//$('#question{QID}').hide();
 
		// Load the question
		$('#question{QID} textarea').val(
 
		    jscd.mobile;
 
		);
    });
 

So the result is only if it's o mobile device or not:
false
And you can use this result as an switch for other questions / relevance equations.
Don't forget tho hide the question. Either by the attributes Display > Always hide this question, or by 'decommenting' the line
//$('#question{QID}').hide();
into
$('#question{QID}').hide();

Best regards/Beste Grüße,
O. Villani

Please Log in or Create an account to join the conversation.

More
5 months 3 days ago #168705 by orvil
orvil replied the topic: Checking if a survey is opened via mobile device?
Hi Joffm,
thanks for this script. Gives a lot of useful information on top. Will try to extend it to get the dpi too :)

Best regards/Beste Grüße,
O. Villani

Please Log in or Create an account to join the conversation.

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!