СИТУАЦИЯ:
Я использую Ionic Push для моего приложения Ionic.
Я уже сделал все настройки и регистрацию, и все работает нормально. Я уже протестировал его и отправил запрос на завиток на устройстве (как ios, так и android), и я правильно получаю уведомление.
И что?
Мне нужно переместить логику push внутри контроллера. Поэтому я могу получить регистрацию и сохранить ее в таблице вместе с другими пользовательскими данными. Чтобы использовать его позже, когда это необходимо.
Но когда я перехожу от кода из.run() в app.js к контроллеру, приложение сбой..
ОШИБКА:
TypeError: Cannot read property 'init' of undefined
at http://localhost:8100/lib/ionic-platform-web-client/dist/ionic.io.bundle.js:5844:47
КОД:
var push = new Ionic.Push({
"debug": true
});
push.register(function(token) {
console.log("My Device token:",token.token);
alert(token.token);
push.saveToken(token); // persist the token in the Ionic Platform
});
ВОПРОС:
Я действительно не знаю, что я делаю неправильно.
Тот же код внутри $ionicPlatform.ready(function() {}
работает отлично, но не в контроллере...
Я уже тестировал одну и ту же логику в новом приложении, и я мог бы поместить эту логику в контроллер.
У вас есть идеи, почему на этот раз я не могу?
Большое спасибо!
Хорошо, я нашел решение.
Мне пришлось оставить логику push внутри метода run(). Чтение вокруг кажется, что путь.
Решение было довольно простым:
Внедрение $ rootScope внутри метода run и использование его для хранения registerId.
После этого вы можете делать все, что хотите, например, отправить запрос на отправку в api и сохранить в db.
КОД:
.run(function($ionicPlatform, $rootScope) {
$ionicPlatform.ready(function() {
var push = new Ionic.Push({
"debug": true
});
push.register(function(token) {
console.log("My Device token:",token.token);
push.saveToken(token); // persist the token in the Ionic Platform
$rootScope.registrationId = token.token; !! <--
});
});
})
$ionicPlatform.ready
?