2015-07-29 2 views
0

Я работаю в гибридном приложении, чтобы сообщать выбоины в нашем городе. Пользователь может зарегистрироваться в приложении классическим способом (заполнить формы) или через одну из социальных сетей (facebook, gmail, twitter).Facebook логин на мобильный через Cordova/Angular/Ionic

Система работает через сервер на рельсах и мобильное приложение в качестве клиента (ионный/углового)

На стороне сервера мы решили эту проблему, пользователь может сделать регистрацию/войти на страницу в как они хотят.

Но есть несколько проблем с приложением, приложение не делает ничего, когда вы делаете нажмите на кнопку «Вход через Facebook»

это стиль его организацию.

app/ 
plugins/ 
    InAppBrowser 
www/ 
    css/ 
    js/ 
     controllers/ 
      splash.js 
      map.js 
      tabs.js 
     services/ 
      users.js 
      notifications.js 
     app.js 
     utils.js 
    lib/ 
     angular/ 
     ng-cordova-oauth/ 
     ngCordova/ 
     ionic/ 
    templates/ 
     map.html 
     splash.html 
     tabs.html 
    index.html 

Контроллер splash.js отвечает за выполнение функции входа в систему.

angular.module('app') 
.controller('SplashCtrl', function($scope, User, $state, $ionicPopup, $auth, $cordovaOauth) { 
$scope.session_id = User.session_id; 

$scope.facebookLogin = function() { 
    alert("flag1"); 
    User.fbSignIn().then(function() { 
     alert("flag2"); 
     User.fbGetData().then(function() { 
      alert("flag3"); 
      User.fbAuth().then(function() { 
       alert("flag4"); 
       // Detect if it is a sign in or sign up 
       if (User.username) { 
        console.log('Controller reports successfull social login.'); 
        $state.go('tab.map'); 
       } else { 
        // Open finish signup modal 
        console.log('Contorller reports this is a new user'); 
        $state.go('finish_signup'); 
       } 
      }, function() { 
       alert("flag5"); 
       $ionicPopup.alert({ 
        title: '<b>App</b>', 
        template: 'Credenciales no válidas, vuelve a intentar.', 
        okText: 'Aceptar', 
        okType: 'button-energized' 
       }) 
      }); 
     }, function() { 
      alert("flag6"); 
      // alert('Could not get your Facebook data...'); 
     }); 
    }, function() { 
     alert("flag7"); 
     // alert('Could not sign you into Facebook...'); 
    }); 
} 
}) 

Я установил флажки предупреждений через функции, чтобы увидеть, где приложение застревает. я могу видеть только предупредит «flag1» на ничего phone.Then происходит

контроллер взаимодействует со службой users.js я поставил код на Pastebin, потому что это слишком долго users.js service

Клиент должен запросить токен доступа к серверу, а затем сравнить в SplashCtrl, если они получили доступ к токену, приложение перенаправляет пользователя в шаблон tabs.html, который будет главной страницей.

На консольном сервере ничего не отображается. Таким образом, приложение-запрос никогда не связывается с сервером. Eventhough «клиенты» и переменные «сервер» уже объявлены в app.js

.constant('SERVER', { 

url: 'https://rails-tutorial-denialtorres.c9.io' 
    }) 
.constant('CLIENTS', { 
    facebook: 'fb Api' 
    }); 

Я могу только вход сервера, если я ставлю имя пользователя и пароль традиционного способа preview

Я надеюсь, вы можете помочь мне с этими ребятами

привет и спасибо!

ответ

0

вы попробуете это? http://ngcordova.com/docs/plugins/oauth/

Я тестировал и работать очень хорошо, легко реализовать, а также вы можете разобрать JSON с маркером (и использовать на стороне сервера, если вам нужно)

Помните эту работу только с реальным устройством, а не с ионными Обслуживать.

В случае, если вы ищете для пользовательских facebook входа в систему (JavaScript), попробуйте этот код:

facebookStatus = function() { 

    var dfd = new jQuery.Deferred(); 

    FB.getLoginStatus(function(response) { 

     if (response.status === 'connected') { 
     dfd.resolve({status: response.status, token: response.authResponse.accessToken}); 
     } else if (response.status === 'not_authorized') { 
     // the user is logged in to Facebook, //but not connected to the app 
     dfd.resolve({status: response.status, token: false}); 
     } else { 
     // the user isn't even logged in to Facebook. 
     FB.login(function(response) { 
      if (response.status=="connected"){ 
      var token = response.authResponse.accessToken; 
      dfd.resolve({status: response.status, token: response.authResponse.accessToken}); 
      } 
     }, {scope:'YOUR SCOPE HERE'}); 
     } 

    }); 
    return dfd.promise(); 
    }; 

* Помните, что если вы используете этот код, чтобы добавить на главную страницу стандартные детали Facebook App (что-то подобное)

<div id="fb-root"></div> 
<script> 

    window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : 'YOUR APP ID', 
      status  : true, // check login status 
      cookie  : false, // enable cookies to allow the server to access the session 
      xfbml  : true // parse XFBML 
     }); 

    }; 

    // Load the SDK asynchronously 
    (function(d){ 
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     ref.parentNode.insertBefore(js, ref); 
    }(document)); 

</script> 
+0

привет! Спасибо за помощь. Я переписал код и отменил службу users.js и написал функцию внутри контроллера splash.js. Поэтому только контроллер будет взаимодействовать с index.html. Внутри контроллера я помещаю эту функцию [pastebin.com/LZx5XFpG] - но я никогда не получаю предупреждение (JSON.stringify (result)); 'alert. Ты можешь помочь мне с этим ?? благодаря! –

+0

Тестирование на реальном устройстве? – Aethiss

+0

Большое спасибо за помощь! Проблема была в библиотеке ngCordova.js и плагине InAppBrowser, для плагина был изменен идентификатор для 'cordova-plugin-inappbrowser' вместо' org.apache.cordova.inappbrowser'. Теперь функция входа в систему работает как шарм. С уважением! –

0

Когда я установить плагин Cordova с add org.apache.cordova.inappbrowser идентификатор для плагина является cordova-plugin-inappbrowser и ngcordova.js библиотека ищет org.apache.cordova.inappbrowser

Изменение этих строк на ngcordova.js решает проблему.

Смежные вопросы