我正在尝试将OneSignal集成到我的Angular 2应用程序中以接收推送通知 . 首先,我使用普通的旧HTML做了一个HelloWorld应用程序,它运行得很漂亮 . 所以我尝试将它包含在我的Angular应用程序中,但用户没有被创建/注册,因此没有订阅接收任何通知 .
代码摘录:
的index.html
<html>
<head>
<meta charset="utf-8">
<title>My Angular App</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<head>
<link rel="manifest" href="/manifest.json">
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script>
<script>
var OneSignal = window.OneSignal || [];
console.log("Init OneSignal");
OneSignal.push(["init", {
appId: "xxx-xxx-xxx-xxx-xxx",
autoRegister: false,
allowLocalhostAsSecureOrigin: true,
notifyButton: {
enable: true
}
}]);
console.log('OneSignal Initialized');
OneSignal.push(function () {
console.log('Registered For Push');
OneSignal.getUserId().then(function (userId) {
console.log("User ID is", userId);
});
});
</script>
</head>
</head>
<body>
<app-root>
<div class="wrap">
<div class="loading outer">
<div class="loading inner"></div>
</div>
</div>
</app-root>
</body>
</html>
userId始终为null .
我检查了以下内容:
-
App ID正确无误
-
通知权限在浏览器中设置为允许
问题:
-
有没有办法在任何组件中执行所有init内容,比如ngOnInit()方法?
-
我想在用户点击组件内的按钮而不是使用铃铛图标时注册推送?如何实现这一目标? (我知道将notifyButton设置为false将不会显示通知铃声)
P.S:使用Angular CLI在Chrome上进行测试(不适用于FF或Safari)
1 回答
我害怕我提出了另一个浏览文档而不是实际阅读它的案例 .
所以我把代码移动了一下,这就是最终为我工作的东西 .
的index.html
app.component.ts
有几点要注意:
收听
subscriptionChange
然后获取用户ID当用户从浏览器手动禁用通知时,也会触发
subscriptionChange
.autoRegister: false,
不会提示'Allow' / 'Deny'选项 . 所以我们要调用registerForPushNotifications
. 可以使用此选项在按钮单击或某事时提示推送通知 .EDIT 2018
我已经制作了一个我在所有角度项目中使用的util类来减少信号的样板代码 .
https://gist.github.com/PsyGik/54a5e6cf5e92ba535272c38c2be773f1