Я пытаюсь интегрировать push-уведомления в мое приложение Ionic/Cordova. Я использую сервис OneSignal для интеграции. Я успешно настроил свой iPhone для получения push-уведомлений с веб-интерфейса OneSignal.Как вводить объект в ионный контроллер из плагина cordova?
Следующим шагом является получение pushToken (который OneSignal/Apple использует для отправки Вдавите уведомления на одном устройстве), чтобы заполнить в ионном контроллер моего приложения, так что я могу реализовать логику приложения и нажмите сообщения на основе приложения Мероприятия.
Я установил плагин Кордовы (OneSignal), и мои iPhone регистрируются, и он сообщает pushToken. Однако я не могу передать строку pushToken ни одному из моих контроллеров для моей жизни. Как я могу это сделать? Ниже приведены мои приложения.js и controller.js.
app.js
angular.module('cApp', ['ionic', 'cApp.controllers'])
.run(function($ionicPlatform, $cordovaSplashscreen, $rootScope) {
$ionicPlatform.ready(function() {
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true); // Fixes keyboard issue
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
/*===========================================================================
http://documentation.onesignal.com/v2.0/docs/phonegap--cordova-sdk-api#init
===========================================================================*/
window.plugins.OneSignal.init("5eb87dse-b458-11e3-ac11-000c2940e62c",
{googleProjectNumber: "",
autoRegister: true},
app.didReceiveRemoteNotificationCallBack);
window.plugins.OneSignal.getIds(function(ids) {
console.log('getIds: ' + JSON.stringify(ids)); // I can see PushToken and UserId in the console.
$rootScope.pushToken = ids.pushToken;
});
});
console.log($rootScope.pushToken);
})
// Configure Routes....... etc.
controller.js
.controller('MenuCtrl', function($scope, $rootScope, $ionicModal, $ionicPlatform) {
console.log($rootScope.pushToken); // It comes back undefined :(
В контроллере.js вы можете попробовать добавить задержку к печати $ rootScope.pushToken? Обратный вызов не запускается сразу из OneSignal.getIds(). Можете ли вы сделать то, что вам нужно, с помощью pushToken в app.js? Вы должны иметь его в своем контроллере.js? – jkasten
Спасибо за советы Jkasten. Я попытался отложить печать $ rootScope.pushToken, и все это выглядит пустым в консоли (оно не отображается). Насколько я могу делать то, что мне нужно делать в app.js, я так не думаю. Мне по существу нужно передать $ rootScope.pushToken на другой сервер. Этот процесс должен выполняться в контроллере. – Syirrus
UPDATE: Я попытался снова отложить печать $ rootScope.pushToken в «MenuCtrl», и он появляется на консоли в таймере в «MenuCtrl». Как я могу сделать это так, чтобы я мог получить доступ к $ rootScope.pushToken, чтобы передать мою функцию за пределами таймера $?У меня есть вызов $ scope. $ Apply(); или что-то подобное, чтобы обновить переменную области видимости или сделать что-то с циклом дайджеста? В других работах, как я могу синхронизировать $ rootScope.pushToken со всеми другими переменными приложения? Большое спасибо за ваш первоначальный ответ. Я получил намного больше! – Syirrus