GSoC 2022 CircuitVerse | 11주 및 12주 보고서
설명
지난 2주 동안 저는 CircuitVerse에 대한 알림 관련 필드를 완성하는 작업을 했습니다.
새로운 알림 버전/UI를 배포했습니다. 각 사용자에 대한 이전 알림을 모두 마이그레이션할 데이터 마이그레이션 작업이 아직 보류 중입니다.
웹 푸시 구현
나는 우리 사이트에 있지 않은 동안 사용자가 알림을 받을 수 있도록 하는 Webpush 기능을 추가하는 작업을 하고 있습니다. 내비게이션 바의 모바일 알림에서 보는 것처럼!
기본적으로 사용자 브라우저에서 등록
service-worker.js
을 해야 합니다.if (navigator.serviceWorker) {
navigator.serviceWorker.register('/serviceworker.js.erb', { scope: '/' });
}
따라서 Rails 앱에 webpush 기능을 추가하기 위한 gemwebpush이 있습니다. 우리는 이미
Push_subscription
라는 모델로 webpush를 구현했습니다. 기본적으로 각 webpush 알림에 대해 구독 시 사용자 브라우저를 트리거한 데이터베이스에 레코드가 있으며 사용자는 웹에서 알림을 볼 수 있습니다.알림에 대한 사용자 정의 전달 방법을 갖는 정말 멋진 기능이 있는 것을 알아차린 gem이 있으므로 사용자 정의 전달 방법
Webpush
을 만들었습니다.class DeliveryMethods::Webpush < Noticed::DeliveryMethods::Base
def deliver
# Logic for sending the notification
user = User.find(params[:user_id])
project = Project.find(params[:project_id])
url = "/users/#{recipient.id}/notifications"
recipient.push_subscriptions.each do |sub|
if params[:webpush_type] == "star"
sub.send_push_notification("#{user.name} starred your project #{project.name}!", url)
else
sub.send_push_notification("#{user.name} forked your project #{project.name}!", url)
end
end
end
end
알림에 전달 방법을 각각 추가합니다.
# app/notifications/fork_notification.rb
class ForkNotification < Noticed::Base
deliver_by :webpush, class: "DeliveryMethods::Webpush"
end
버그: 'id'가 있는 프로젝트를 찾을 수 없습니다.
처음에는 모든 알림에 대해 프로젝트 및 사용자(알림을 트리거한 사람)의
ids
를 저장했습니다. 이로 인해 프로젝트 종속 알림이 삭제되지 않아 오류가 발생했습니다.Aboobacker는 버그를 찾는 데 도움을 주었고 마침내
params
에 객체를 저장하는 접근 방식을 만들었으므로 프로젝트를 파괴하면 종속 알림 객체도 파괴됩니다. 그러나 여기에서 문제가 발생했습니다. 새 알림 버전은 1.5주 전에 릴리스되었으며 그동안 project_id
에서 user_id
및 params
를 의미하는 이전 매개 변수 버전이 포함된 많은 알림이 저장되었습니다. 그래서 올바른 방법으로 매개변수를 업데이트할 파일data_migration
을 만들기로 결정했습니다. 한번 보세요:class PopulateNoticedNotificationWithValidParams < ActiveRecord::DataMigration
def up
NoticedNotification.find_each do |notification|
if Project.where(id: notification.params[:project_id]).exists?
project = Project.find(notification.params[:project_id])
notification.params[:user] = User.find(notification.params[:user_id])
notification.params[:project] = project
notification.save
else
notification.destroy!
end
end
end
end
홍보
다음 작업:
결론
SIH와 건강 문제로 인해 3-4일 동안 일하지 못했습니다. 하지만 언제나처럼 많이 배웠습니다!
Reference
이 문제에 관하여(GSoC 2022 CircuitVerse | 11주 및 12주 보고서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vedantjain03/gsoc-2022-circuitverse-week-11-and-12-report-4n41텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)