加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

将OneSignal与Angular集成

发布时间:2020-12-17 06:51:55 所属栏目:安全 来源:网络整理
导读:我正在尝试将OneSignal集成到我的Angular 2应用程序中以接收推送通知.首先,我使用普通的旧 HTML做了一个HelloWorld应用程序,它运行得很漂亮.所以我试着将它包含在我的Angular应用程序中,但用户没有被创建/注册,因此没有订阅接收任何通知. 代码摘录: 的index
我正在尝试将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)

解决方法

我害怕我提出了另一个浏览文档而不是实际阅读文档的案例.

所以我把代码移动了一下,这就是最终为我工作的东西.

的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='async'></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css">
  </head>
</head>

<body>
  <app-root>
    <div class="wrap">
      <div class="loading outer">
        <div class="loading inner"></div>
      </div>
    </div>
  </app-root>
</body>

</html>

app.component.ts

export class AppComponent implements OnInit {
    .
    .
    .
    .
    ngOnInit() {
    var OneSignal = window['OneSignal'] || [];
    console.log("Init OneSignal");
    OneSignal.push(["init",{
      appId: "xxx-xxx-xxx-xxx",notifyButton: {
        enable: false
      }
    }]);
    console.log('OneSignal Initialized');
    OneSignal.push(function () {
      console.log('Register For Push');
      OneSignal.push(["registerForPushNotifications"])
    });
    OneSignal.push(function () {
      // Occurs when the user's subscription changes to a new value.
      OneSignal.on('subscriptionChange',function (isSubscribed) {
        console.log("The user's subscription state is now:",isSubscribed);
        OneSignal.getUserId().then(function (userId) {
          console.log("User ID is",userId);
        });
      });
    });
    }
    .
    .
    .
}

有几点需要注意:

>收听subscriptionChange,然后获取用户ID
>当用户从浏览器手动禁用通知时,也会触发subscriptionChange.
> autoRegister:false,不会提示’允许’/’拒绝’选项.所以我们必须调用registerForPushNotifications.可以使用此选项在按钮单击或某事时提示推送通知.

编辑2018年

我创建了一个util类,我在所有角度项目中使用它来减少信号的样板代码.

https://gist.github.com/PsyGik/54a5e6cf5e92ba535272c38c2be773f1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读