gpt4 book ai didi

javascript - 如何从 cordova 插件将对象注入(inject) ionic Controller ?

转载 作者:行者123 更新时间:2023-11-29 15:35:32 24 4
gpt4 key购买 nike

我正在尝试将推送通知集成到我的 Ionic/Cordova 应用程序中。我正在使用服务 OneSignal 进行集成。我已成功设置我的 iPhone 以从 OneSignal 的网络界面接收推送通知。

下一步是获取 pushToken(OneSignal/Apple 使用它来发送推送单个设备的通知)填充到我的应用程序的 ionic Controller ,以便我可以实现应用程序逻辑和推送消息基于应用事件。

我安装了他们的(OneSignal 的)Cordova 插件,我的 iPhone 注册并报告了 pushToken。但是,我这辈子都无法将 pushToken 字符串传递给我的任何 Controller 。我怎样才能做到这一点?下面是我的 app.js 和 controller.js。

应用程序.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 :(

最佳答案

听起来 app.js 在 controller.js 之前运行。如果是这种情况,您应该能够执行以下操作;

  • 当您的应用程序从通知中打开时进行处理
    • 在 didReceiveRemoteNotificationCallBack 的 $rootScope 上设置一个变量,并在你的 Controller 中读取它。
  • 当您的应用正在运行并且您收到通知时进行处理
    • 在您的 Controller 中为 $rootScope 分配一个处理函数,并在您的 didReceiveRemoteNotificationCallBack 存在时调用它。

这是实现这两个流程的代码:

应用程序.js:

didReceiveRemoteNotificationCallBack(message, additionalData, isActive) {
var notificationObj = {message: message, additionalData: additionalData, isActive: isActive};
if ($rootScope.notificationReceivedHandler)
$rootScope.notificationReceivedHandler(notificationObj);
else
$rootScope.openedFromNotification = notificationObj;
}

controller.js:

.controller('MenuCtrl', function($scope, $rootScope, $ionicModal, $ionicPlatform) {
if ($rootScope.openedFromNotification)
processNotificationOpened($rootScope.openedFromNotification);
$rootScope.openedFromNotification = processNotificationOpened;
}

function processNotificationOpened(notificationObj) {
// Read and process what you need to here.
}

注意:以上代码未经测试。

关于javascript - 如何从 cordova 插件将对象注入(inject) ionic Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29679111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com