Social login in mobile device

Hi,
I have a problem on login with the plugin in mobile devices.
The site with the plugin is: http://hockeybud.dev.dmsdn.com/topoftheworld/
The implementation:
In the index page the code to call the plugin is:
<script type="text/javascript">  
	/* Replace #your_subdomain# by the subdomain of a Site in your OneAll account */    
	var oneall_subdomain = 'topoftheworld';
	
	/* The library is loaded asynchronously */
	var oa = document.createElement('script');
	oa.type = 'text/javascript'; oa.async = true;
	oa.src = 'http://' + oneall_subdomain + '.api.oneall.com/socialize/library.js';
	var s = document.getElementsByTagName('script')[0];
	s.parentNode.insertBefore(oa, s);

	var my_on_login_redirect = function(args) {
		jQuery.ajax({ url: "callback_handler.php?user_token="+args.connection.user_token})
			.success(function(data, textStatus, jqXHR) {
				if(data.exists){
					window.location.href = 'thanksyou.php';	
				}else{
					if ("user_token" in data.response.result.data.user){
						var user_token = data.response.result.data.user.user_token;
						$('#social_token').val(user_token);
					}
					if ("emails" in data.response.result.data.user.identities[0]){
						var email = data.response.result.data.user.identities[0].emails[0].value;
						$('#email').val(email);
					}
					if ("currentLocation" in data.response.result.data.user.identities[0]){
						var currentlocation= data.response.result.data.user.identities[0].currentLocation;
						$('#city').val(currentlocation);
					}
				}
				
			});

		return false;
	}
 /* Embeds the buttons into the container oa_social_login_container */
	var _oneall = _oneall || [];
	_oneall.push(['social_login', 'set_providers', ['facebook', 'twitter', 'instagram','google']]);
	_oneall.push(['social_login', 'set_grid_sizes', [4,1]]);
	// _oneall.push(['social_login', 'set_custom_css_uri', '//http://ec.oneoneapp.dev.dmsdn.com/test.css']);
	// _oneall.push(['social_login', 'set_callback_uri', your_callback_script]); // We'll use an ajax call instead a redirect.
	_oneall.push(['social_login', 'set_event', 'on_login_redirect', my_on_login_redirect ]);
	_oneall.push(['social_login', 'do_render_ui', 'oa_social_login_container']);
</script>
The callback_handler.php:
<?php
require('../wp-config.php' );
global $wpdb;
$exists = '{"exists":"true"}';


//Your Site Settings
$site_subdomain = 'topoftheworld';
$site_public_key = '################################';
$site_private_key = '###############################';

//API Access Domain
$site_domain = $site_subdomain.'.api.oneall.com';
$user_token = $_GET['user_token'];	
//Connection Resource
$resource_uri = '//'.$site_domain.'/users/'.$user_token.'.json';

$userexist = $wpdb->get_results( "SELECT id FROM topoftheworld_register WHERE social_token='".$_GET['user_token']."';" );
if(!empty($userexist)){
	header('Content-Type: application/json');
	echo $exists;
}else{
	//Setup connection
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $resource_uri);
	curl_setopt($curl, CURLOPT_HEADER, 0);
	curl_setopt($curl, CURLOPT_USERPWD, $site_public_key . ":" . $site_private_key);
	curl_setopt($curl, CURLOPT_TIMEOUT, 15);
	curl_setopt($curl, CURLOPT_VERBOSE, 0);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
	curl_setopt($curl, CURLOPT_FAILONERROR, 0);

	//Send request
	$result_json = curl_exec($curl);
	curl_close($curl);
	$result = json_decode($result_json);

	header('Content-Type: application/json');

	echo $result_json;
}
The error is:
When I access to the site on my mobile device, click in the social login, access to the social network, and then show this error:
ERR_UNKNOWN_URL_SCHEME
is posible that page doesent work temporaly or permanently moving has a new address null://topoftheworld.api.oneall.com/socialize/redirect.html?provider_connection_token=##########################_=_

The error is only in mobile devices, in desktop the login works fine.

Answers

  • Hi,
    Somehow the transport part is lost. There are reports of similar behaviour on mobile.
    One turnaround would be to set the full URL in the ajax call of your login_redirect function.
    For this, you could use the args.callback_uri, which should hold the full URL to your callback.

    Hope this helps.
Sign In or Register to comment.