{"action":"closed","number":1667,"pull_request":{"url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls/1667","id":90703874,"html_url":"https://github.com/the-blue-alliance/the-blue-alliance/pull/1667","diff_url":"https://github.com/the-blue-alliance/the-blue-alliance/pull/1667.diff","patch_url":"https://github.com/the-blue-alliance/the-blue-alliance/pull/1667.patch","issue_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/issues/1667","number":1667,"state":"closed","locked":false,"title":"Web notifications, Fixes #1182","user":{"login":"fangeugene","id":1421884,"avatar_url":"https://avatars.githubusercontent.com/u/1421884?v=3","gravatar_id":"","url":"https://api.github.com/users/fangeugene","html_url":"https://github.com/fangeugene","followers_url":"https://api.github.com/users/fangeugene/followers","following_url":"https://api.github.com/users/fangeugene/following{/other_user}","gists_url":"https://api.github.com/users/fangeugene/gists{/gist_id}","starred_url":"https://api.github.com/users/fangeugene/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fangeugene/subscriptions","organizations_url":"https://api.github.com/users/fangeugene/orgs","repos_url":"https://api.github.com/users/fangeugene/repos","events_url":"https://api.github.com/users/fangeugene/events{/privacy}","received_events_url":"https://api.github.com/users/fangeugene/received_events","type":"User","site_admin":false},"body":"This PR enables push notifications on the web via Firebase Cloud Messaging. Currently only displays Ping and a bare-bones Match Score notifications when the website is closed or is NOT the tab in focus in the browser. It requires the user to enable notifications on the Account page.\r\n\r\nIssues to be addressed in a later PR:\r\n- Requires the user to be logged in for background notifications, but GAE login sessions are set to 2 weeks max.\r\n- Support all notification types.\r\n- Handle case where the website is the tab in focus.\r\n\r\nSome images:\r\n![image](https://cloud.githubusercontent.com/assets/1421884/19665854/239625ac-9a15-11e6-80ac-129b97266a04.png)\r\n\r\n![image](https://cloud.githubusercontent.com/assets/1421884/19666071/3bb2a416-9a16-11e6-973b-32c6bb2fe86f.png)\r\n\r\n![image](https://cloud.githubusercontent.com/assets/1421884/19665877/3c6aafbc-9a15-11e6-86ec-5bb2e0d37b8d.png)\r\n\r\n![image](https://cloud.githubusercontent.com/assets/1421884/19665879/3f17c1dc-9a15-11e6-944b-d66fccc07c51.png)\r\n","created_at":"2016-10-24T22:17:39Z","updated_at":"2016-10-26T17:08:18Z","closed_at":"2016-10-26T17:08:18Z","merged_at":"2016-10-26T17:08:18Z","merge_commit_sha":"f64a87f346504dd3ec0741627caffbf0494169cd","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls/1667/commits","review_comments_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls/1667/comments","review_comment_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls/comments{/number}","comments_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/issues/1667/comments","statuses_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/statuses/5df45aba01d7b59ecfc044f90f387534eaa587c3","head":{"label":"fangeugene:web-notifications","ref":"web-notifications","sha":"5df45aba01d7b59ecfc044f90f387534eaa587c3","user":{"login":"fangeugene","id":1421884,"avatar_url":"https://avatars.githubusercontent.com/u/1421884?v=3","gravatar_id":"","url":"https://api.github.com/users/fangeugene","html_url":"https://github.com/fangeugene","followers_url":"https://api.github.com/users/fangeugene/followers","following_url":"https://api.github.com/users/fangeugene/following{/other_user}","gists_url":"https://api.github.com/users/fangeugene/gists{/gist_id}","starred_url":"https://api.github.com/users/fangeugene/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fangeugene/subscriptions","organizations_url":"https://api.github.com/users/fangeugene/orgs","repos_url":"https://api.github.com/users/fangeugene/repos","events_url":"https://api.github.com/users/fangeugene/events{/privacy}","received_events_url":"https://api.github.com/users/fangeugene/received_events","type":"User","site_admin":false},"repo":{"id":3987257,"name":"the-blue-alliance","full_name":"fangeugene/the-blue-alliance","owner":{"login":"fangeugene","id":1421884,"avatar_url":"https://avatars.githubusercontent.com/u/1421884?v=3","gravatar_id":"","url":"https://api.github.com/users/fangeugene","html_url":"https://github.com/fangeugene","followers_url":"https://api.github.com/users/fangeugene/followers","following_url":"https://api.github.com/users/fangeugene/following{/other_user}","gists_url":"https://api.github.com/users/fangeugene/gists{/gist_id}","starred_url":"https://api.github.com/users/fangeugene/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fangeugene/subscriptions","organizations_url":"https://api.github.com/users/fangeugene/orgs","repos_url":"https://api.github.com/users/fangeugene/repos","events_url":"https://api.github.com/users/fangeugene/events{/privacy}","received_events_url":"https://api.github.com/users/fangeugene/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fangeugene/the-blue-alliance","description":"FIRST Robotics match video archive website","fork":true,"url":"https://api.github.com/repos/fangeugene/the-blue-alliance","forks_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/forks","keys_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/teams","hooks_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/hooks","issue_events_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/issues/events{/number}","events_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/events","assignees_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/assignees{/user}","branches_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/branches{/branch}","tags_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/tags","blobs_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/git/refs{/sha}","trees_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/statuses/{sha}","languages_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/languages","stargazers_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/stargazers","contributors_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/contributors","subscribers_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/subscribers","subscription_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/subscription","commits_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/commits{/sha}","git_commits_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/git/commits{/sha}","comments_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/comments{/number}","issue_comment_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/issues/comments{/number}","contents_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/contents/{+path}","compare_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/merges","archive_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/downloads","issues_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/issues{/number}","pulls_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/pulls{/number}","milestones_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/milestones{/number}","notifications_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/labels{/name}","releases_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/releases{/id}","deployments_url":"https://api.github.com/repos/fangeugene/the-blue-alliance/deployments","created_at":"2012-04-10T21:22:48Z","updated_at":"2016-09-18T06:55:10Z","pushed_at":"2016-10-26T17:02:11Z","git_url":"git://github.com/fangeugene/the-blue-alliance.git","ssh_url":"git@github.com:fangeugene/the-blue-alliance.git","clone_url":"https://github.com/fangeugene/the-blue-alliance.git","svn_url":"https://github.com/fangeugene/the-blue-alliance","homepage":"thebluealliance.com","size":21015,"stargazers_count":4,"watchers_count":4,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":4,"default_branch":"master"}},"base":{"label":"the-blue-alliance:master","ref":"master","sha":"9d895d7f58b1df1f66998a26e004d0f37dc09499","user":{"login":"the-blue-alliance","id":7354965,"avatar_url":"https://avatars.githubusercontent.com/u/7354965?v=3","gravatar_id":"","url":"https://api.github.com/users/the-blue-alliance","html_url":"https://github.com/the-blue-alliance","followers_url":"https://api.github.com/users/the-blue-alliance/followers","following_url":"https://api.github.com/users/the-blue-alliance/following{/other_user}","gists_url":"https://api.github.com/users/the-blue-alliance/gists{/gist_id}","starred_url":"https://api.github.com/users/the-blue-alliance/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/the-blue-alliance/subscriptions","organizations_url":"https://api.github.com/users/the-blue-alliance/orgs","repos_url":"https://api.github.com/users/the-blue-alliance/repos","events_url":"https://api.github.com/users/the-blue-alliance/events{/privacy}","received_events_url":"https://api.github.com/users/the-blue-alliance/received_events","type":"Organization","site_admin":false},"repo":{"id":888427,"name":"the-blue-alliance","full_name":"the-blue-alliance/the-blue-alliance","owner":{"login":"the-blue-alliance","id":7354965,"avatar_url":"https://avatars.githubusercontent.com/u/7354965?v=3","gravatar_id":"","url":"https://api.github.com/users/the-blue-alliance","html_url":"https://github.com/the-blue-alliance","followers_url":"https://api.github.com/users/the-blue-alliance/followers","following_url":"https://api.github.com/users/the-blue-alliance/following{/other_user}","gists_url":"https://api.github.com/users/the-blue-alliance/gists{/gist_id}","starred_url":"https://api.github.com/users/the-blue-alliance/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/the-blue-alliance/subscriptions","organizations_url":"https://api.github.com/users/the-blue-alliance/orgs","repos_url":"https://api.github.com/users/the-blue-alliance/repos","events_url":"https://api.github.com/users/the-blue-alliance/events{/privacy}","received_events_url":"https://api.github.com/users/the-blue-alliance/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/the-blue-alliance/the-blue-alliance","description":"A webapp for accessing information about the FIRST Robotics Competition.","fork":false,"url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance","forks_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/forks","keys_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/keys{/key_id}","collaborators_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/teams","hooks_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/hooks","issue_events_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/issues/events{/number}","events_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/events","assignees_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/assignees{/user}","branches_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/branches{/branch}","tags_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/tags","blobs_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/git/refs{/sha}","trees_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/git/trees{/sha}","statuses_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/statuses/{sha}","languages_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/languages","stargazers_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/stargazers","contributors_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/contributors","subscribers_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/subscribers","subscription_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/subscription","commits_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/commits{/sha}","git_commits_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/git/commits{/sha}","comments_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/comments{/number}","issue_comment_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/issues/comments{/number}","contents_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/contents/{+path}","compare_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/compare/{base}...{head}","merges_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/merges","archive_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/downloads","issues_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/issues{/number}","pulls_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls{/number}","milestones_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/milestones{/number}","notifications_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/labels{/name}","releases_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/releases{/id}","deployments_url":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/deployments","created_at":"2010-09-04T20:34:11Z","updated_at":"2016-10-22T04:39:43Z","pushed_at":"2016-10-26T17:08:18Z","git_url":"git://github.com/the-blue-alliance/the-blue-alliance.git","ssh_url":"git@github.com:the-blue-alliance/the-blue-alliance.git","clone_url":"https://github.com/the-blue-alliance/the-blue-alliance.git","svn_url":"https://github.com/the-blue-alliance/the-blue-alliance","homepage":"thebluealliance.com","size":20433,"stargazers_count":133,"watchers_count":133,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":93,"mirror_url":null,"open_issues_count":247,"forks":93,"open_issues":247,"watchers":133,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls/1667"},"html":{"href":"https://github.com/the-blue-alliance/the-blue-alliance/pull/1667"},"issue":{"href":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/issues/1667"},"comments":{"href":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/issues/1667/comments"},"review_comments":{"href":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls/1667/comments"},"review_comment":{"href":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/pulls/1667/commits"},"statuses":{"href":"https://api.github.com/repos/the-blue-alliance/the-blue-alliance/statuses/5df45aba01d7b59ecfc044f90f387534eaa587c3"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"fangeugene","id":1421884,"avatar_url":"https://avatars.githubusercontent.com/u/1421884?v=3","gravatar_id":"","url":"https://api.github.com/users/fangeugene","html_url":"https://github.com/fangeugene","followers_url":"https://api.github.com/users/fangeugene/followers","following_url":"https://api.github.com/users/fangeugene/following{/other_user}","gists_url":"https://api.github.com/users/fangeugene/gists{/gist_id}","starred_url":"https://api.github.com/users/fangeugene/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fangeugene/subscriptions","organizations_url":"https://api.github.com/users/fangeugene/orgs","repos_url":"https://api.github.com/users/fangeugene/repos","events_url":"https://api.github.com/users/fangeugene/events{/privacy}","received_events_url":"https://api.github.com/users/fangeugene/received_events","type":"User","site_admin":false},"comments":0,"review_comments":20,"commits":14,"additions":559,"deletions":25,"changed_files":18}}
{"actor":{"display_login":"fangeugene"}}