zoukankan      html  css  js  c++  java
  • GitHub没有实时通知怎么办?当然是自己上手写一个啊!

    相信各位程序员对github已经不陌生了。不知道各位有没有注意到GitHub没有推送通知这个功能。当有人在我的存储库中创建了一个提取请求/问题时,我可以收到电子邮件通知,但当有人stars/forks的时候却没没有通知。

     

    此外,我已经收到了12253封电子邮件通知。。。。。。。。。。这件事好像不是那么酷了。

    看,我不是在开玩笑!

    作为一个专业的开发人员,这尼玛的就忍不了啊,必须自己上手解决好吗!我决定建立一个Chrome扩展程序,只要有人与我的GitHub存储库进行交互,即可实时发送通知。这是Google Chrome商店中的GitHub通知程序。你也可以在这里找到更多的信息。

    实时Chrome通知

    当有人执行以下任何操作时,你会看到上述通知之一:

    • 在问题上创建问题或意见
    • 创建拉请求
    • 为你的repository点forks
    • 为你的repository 点stars
    • 将代码推送到你的存储库

    如何实现

    最初,我以为建立起来真的很简单。在我的印象中这简直就是小儿科嘛,毕竟姐可是有建立Chrome apps的经验哟。

    但是一如往常,魔鬼在细节上。这里是工具,框架,以及我用来获取和运行的其他东西:

    • GitHub应用程式
    • Express和NodeJS
    • Firebase
    • Google Cloud Messaging
    • Chrome扩展程序


    GitHub Apps

    要实时向用户发送通知,只要有任何用户交互,我们就需要使用webhook来ping通。有效载荷将包含信息,例如与你的存储库进行交互的人员,采取的操作(是star还是fork)以及存储库的名称。

    为此,请注册一个GitHub应用程序。它将允许你选择你的GitHub应用程序将检测哪些webhook事件。

    GitHub应用程式的权限

    填写你的webhook URL,稍后我将介绍。

    进一步阅读:GitHub应用程序

    Express和NodeJS

    在定义webhook触发器的事件之后,你需要一个服务器来接收和处理有效负载。由于独立的Chrome扩展程序无法启动服务器,因此我们需要为此创建一个单独的项目。

    在Express和NodeJS项目中创建一个POST端点,它将处理webhook。

    app.post('/ watch',function(req,res,next){
    .....
    });

    对于webhook,我喜欢使用ngrok - 一个免费的工具(拥有30个用户的上限),它创建一个可公开访问的URL来配置webhook服务。

    一旦你已经安装了ngrok,你可以用它为应用程序选择运行的通道,比如,端口3000。这将和打字一样简单

    ngrok http 3000

    ngrok然后产生两种一个URL http和https 。您可以使用它们临时填写GitHub应用程序中的webhook URL,直到您托管它们。

    进一步阅读:ngrok

    Chrome扩展程序

    接下来,为不的Chrome扩展程序创建一个单独的项目。Chrome扩展本身很容易构建。首先,创建一个manifest.json包含扩展名,描述,版本号等属性的文件。

    我们还需要一个popup.html文件,当有人下载​​并点击你的Chrome扩展程序时,该文件显示弹出式窗口。弹出窗口提示用户填写他们的GitHub用户名,如下所示:

    popup.html

    保存你的GitHub用户名后,将你的GitHub用户名连接到将收到通知的计算机。

    我们同时使用Google Cloud Messaging和Firebase。

    进一步阅读:入门:构建Chrome扩展

    Google Cloud Messaging和Firebase

    Google Cloud Messaging(GCM)是一项移动通知服务,可让开发人员在服务器和客户端应用之间发送消息。

    Firebase是由Google开发的实时云端托管数据库。我选择了Firebase,因为它很容易设置。

    在Chrome扩展程序中,创建一个popup.js文件。这将使用GCM和Firebase。将你的用户名保存在弹出窗口后,使用GCM生成一个注册ID来标识你的浏览器。将registrationID作为ID来区分你的计算机与其他用户。

    注册ID和GitHub用户名将被保存为Firebase中的条目。

    进一步阅读:FirebaseGoogle Cloud Messaging

    这一切如何工作?

     


    Github通知程序如何构建的总结图

    总结上图,每当有人与GitHub存储库进行交互时,都会发生以下情况:

    • 有效载荷将从GitHub Apps发送到Express和NodeJS服务器。
    • 服务器接收有效载荷,并从有效载荷中提取GitHub用户名。
    • 从GitHub用户名查询关联的registrationID的Firebase。
    • Google Cloud Messaging用于根据注册ID将服务器的消息发送到Chrome扩展。
    • Chrome扩展程序收到Google Cloud Messaging的邮件后,会创建一个Chrome通知并将其推送给用户。

    然后当当当!这就可以收到GitHub的实时Chrome通知辣!

     

    非常感谢你能阅读到这里!真心希望以上内容可以帮助到你~~~

     

  • 相关阅读:
    bzoj 1856 组合
    bzoj 2809 左偏树平衡树启发式合并
    【HMOI】小C的填数游戏 DP+线段树维护
    【HNOI】 小A的树 tree-dp
    bzoj 1483 链表启发式合并
    bzoj 2733 平衡树启发式合并
    bzoj 2669 状压DP
    bzoj 2165 DP
    【HNOI】 lct tree-dp
    远程debug配置
  • 原文地址:https://www.cnblogs.com/gbin1/p/7527107.html
Copyright © 2011-2022 走看看