Checking if a survey is opened via mobile device?

Mehr
5 Monate 2 Tage her #168679 von DanielVN
DanielVN erstellte das Thema 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

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168680 von tpartner
tpartner antwortete auf das Thema: 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.

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168682 von DanielVN
DanielVN antwortete auf das Thema: 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.

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168683 von DenisChenu
DenisChenu antwortete auf das Thema: 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 .

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168685 von orvil
orvil antwortete auf das Thema: 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

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168689 von Joffm
Joffm antwortete auf das Thema: 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

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168690 von DanielVN
DanielVN antwortete auf das Thema: 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.

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168693 von orvil
orvil antwortete auf das Thema: 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

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168694 von DanielVN
DanielVN antwortete auf das Thema: Checking if a survey is opened via mobile device?
Hi Orvil,

I'm using version 2.73.0+171219 :)

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168697 von Joffm
Joffm antwortete auf das Thema: 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

Dateianhang:

Dateiname: limesurvey...4985.lss
Dateigröße:25 KB


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

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168701 von DenisChenu
DenisChenu antwortete auf das Thema: Checking if a survey is opened via mobile device?

orvil schrieb: 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 .

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168702 von orvil
orvil antwortete auf das Thema: 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

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168703 von DanielVN
DanielVN antwortete auf das Thema: Checking if a survey is opened via mobile device?
Awesome :) Thanks a lot to all of you.

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 2 Tage her #168704 von orvil
orvil antwortete auf das Thema: 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

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Mehr
5 Monate 1 Tag her #168705 von orvil
orvil antwortete auf das Thema: 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

Bitte Anmelden oder Registrieren um an der Konversation teilzunehmen.

Jetzt loslegen!

Melden Sie sich jetzt an, und erstellen Sie in wenigen Minuten Ihre erste Umfrage.

Account einrichten

Abonnieren Sie unseren Newsletter

Abonnieren Sie unseren Newsletter für alle Neuigkeiten rund um LimeSurvey
captcha