FCM kifejlesztése
This commit is contained in:
@@ -30,39 +30,7 @@ namespace WorkFlowCheck.API.Controllers
|
||||
|
||||
try
|
||||
{
|
||||
var pathToJsonKey = "com-nuvolar-wfcapp-firebase-adminsdk-fbsvc-37642626e4.json";
|
||||
var projectId = "com-nuvolar-wfcapp";
|
||||
var credential = GoogleCredential
|
||||
.FromFile(pathToJsonKey)
|
||||
.CreateScoped("https://www.googleapis.com/auth/firebase.messaging");
|
||||
var accessToken = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
|
||||
|
||||
var client = new HttpClient();
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
|
||||
|
||||
|
||||
var message = new
|
||||
{
|
||||
message = new
|
||||
{
|
||||
token = fCMMessageDTO.Token,
|
||||
notification = new
|
||||
{
|
||||
title = fCMMessageDTO.Title,
|
||||
body = fCMMessageDTO.Body,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var json = JsonConvert.SerializeObject(message);
|
||||
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
|
||||
var response = await client.PostAsync($"https://fcm.googleapis.com/v1/projects/{projectId}/messages:send", content);
|
||||
|
||||
var result = await response.Content.ReadAsStringAsync();
|
||||
|
||||
|
||||
retVal.IsSuccess = await _messageService.SendFCMMessage(fCMMessageDTO);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -82,39 +50,7 @@ namespace WorkFlowCheck.API.Controllers
|
||||
|
||||
try
|
||||
{
|
||||
var pathToJsonKey = "com-nuvolar-wfcapp-firebase-adminsdk-fbsvc-37642626e4.json";
|
||||
var projectId = "com-nuvolar-wfcapp";
|
||||
var credential = GoogleCredential
|
||||
.FromFile(pathToJsonKey)
|
||||
.CreateScoped("https://www.googleapis.com/auth/firebase.messaging");
|
||||
var accessToken = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
|
||||
|
||||
var client = new HttpClient();
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
|
||||
|
||||
|
||||
var message = new
|
||||
{
|
||||
message = new
|
||||
{
|
||||
token = await _messageService.GetLastFCMTokensAsync(),
|
||||
notification = new
|
||||
{
|
||||
title = fCMMessageDTO.Title,
|
||||
body = fCMMessageDTO.Body,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var json = JsonConvert.SerializeObject(message);
|
||||
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
|
||||
var response = await client.PostAsync($"https://fcm.googleapis.com/v1/projects/{projectId}/messages:send", content);
|
||||
|
||||
var result = await response.Content.ReadAsStringAsync();
|
||||
|
||||
|
||||
retVal.IsSuccess = await _messageService.SendFCMMessageToLastToken(fCMMessageDTO);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Data Source=WS2016DC\\SQLEXPRESS;Initial Catalog=WFC;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False"
|
||||
"DefaultConnection": "Data Source=WS2016DC\\SQLEXPRESS;Initial Catalog=WFCUAT;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
|
||||
@@ -26,13 +26,16 @@ namespace WorkFlowCheck.BL.Services
|
||||
{
|
||||
|
||||
private readonly INumberGeneratorService _numberGeneratorService;
|
||||
private readonly IMessageService _messageService;
|
||||
|
||||
public CheckListService(AppDbContext dbContext,
|
||||
IMapper mapper,
|
||||
INumberGeneratorService numberGeneratorService,
|
||||
IMessageService messageService,
|
||||
IUserService userService) : base(dbContext, mapper)
|
||||
{
|
||||
_numberGeneratorService = numberGeneratorService;
|
||||
_messageService = messageService;
|
||||
}
|
||||
|
||||
public async Task<CheckListHeaderDTO> GetCheckListHeaderAsync(int Id)
|
||||
|
||||
@@ -3,13 +3,17 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WorkFlowCheck.Common.DTO;
|
||||
|
||||
namespace WorkFlowCheck.BL.Services.Interfaces
|
||||
{
|
||||
public interface IMessageService
|
||||
{
|
||||
Task<bool> SendMailAsync(List<string> recipients, string subject, string htmlBody);
|
||||
|
||||
Task<bool> SendFCMTokenAsync(string token);
|
||||
Task<string> GetLastFCMTokensAsync();
|
||||
Task<bool> SendFCMMessage(FCMMessageDTO fCMMessageDTO);
|
||||
Task<bool> SendFCMMessageToLastToken(FCMMessageDTO fCMMessageDTO);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,11 @@ using WorkFlowCheck.DL.Entities;
|
||||
using AutoMapper;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using WorkFlowCheck.DL;
|
||||
using WorkFlowCheck.Common.DTO;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
using Google.Apis.Auth.OAuth2;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace WorkFlowCheck.BL.Services
|
||||
{
|
||||
@@ -53,13 +58,20 @@ namespace WorkFlowCheck.BL.Services
|
||||
var retVal = true;
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(token))
|
||||
if (!string.IsNullOrEmpty(token))
|
||||
{
|
||||
var FCMToken = new FCMToken()
|
||||
|
||||
var FCMToken = await _dbContext.FCMTokens.Where(w => w.Token == token).FirstOrDefaultAsync();
|
||||
if (FCMToken == null)
|
||||
{
|
||||
Token = token
|
||||
};
|
||||
await _dbContext.FCMTokens.AddAsync(FCMToken);
|
||||
FCMToken = new FCMToken();
|
||||
FCMToken.Token = token;
|
||||
await _dbContext.FCMTokens.AddAsync(FCMToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
FCMToken.LastModAt = DateTime.UtcNow;
|
||||
}
|
||||
await _dbContext.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
@@ -78,7 +90,7 @@ namespace WorkFlowCheck.BL.Services
|
||||
{
|
||||
var FCMToken = await _dbContext.FCMTokens
|
||||
.AsNoTracking()
|
||||
.OrderByDescending(x => x.CreatedAt)
|
||||
.OrderByDescending(x => x.LastModAt)
|
||||
.Take(1)
|
||||
.FirstOrDefaultAsync();
|
||||
if (FCMToken != null && !string.IsNullOrEmpty(FCMToken.Token))
|
||||
@@ -93,6 +105,67 @@ namespace WorkFlowCheck.BL.Services
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
public async Task<bool> SendFCMMessage(FCMMessageDTO fCMMessageDTO)
|
||||
{
|
||||
var retVal = true;
|
||||
try
|
||||
{
|
||||
var pathToJsonKey = "com-nuvolar-wfcapp-firebase-adminsdk-fbsvc-37642626e4.json";
|
||||
var projectId = "com-nuvolar-wfcapp";
|
||||
var credential = GoogleCredential
|
||||
.FromFile(pathToJsonKey)
|
||||
.CreateScoped("https://www.googleapis.com/auth/firebase.messaging");
|
||||
var accessToken = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
|
||||
|
||||
var client = new HttpClient();
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
|
||||
|
||||
|
||||
var message = new
|
||||
{
|
||||
message = new
|
||||
{
|
||||
token = fCMMessageDTO.Token,
|
||||
notification = new
|
||||
{
|
||||
title = fCMMessageDTO.Title,
|
||||
body = fCMMessageDTO.Body,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var json = JsonConvert.SerializeObject(message);
|
||||
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
|
||||
var response = await client.PostAsync($"https://fcm.googleapis.com/v1/projects/{projectId}/messages:send", content);
|
||||
|
||||
var result = await response.Content.ReadAsStringAsync();
|
||||
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
retVal = false;
|
||||
Log.Error(ex.Message);
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
public async Task<bool> SendFCMMessageToLastToken(FCMMessageDTO fCMMessageDTO)
|
||||
{
|
||||
var retVal = true;
|
||||
try
|
||||
{
|
||||
fCMMessageDTO.Token = await GetLastFCMTokensAsync();
|
||||
|
||||
retVal = await SendFCMMessage(fCMMessageDTO);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(ex.Message);
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,15 +19,17 @@ namespace WorkFlowCheck.BL.Services
|
||||
{
|
||||
private readonly IRequestContext _requestContext;
|
||||
private readonly IUserService _userService;
|
||||
|
||||
private readonly IMessageService _messageService;
|
||||
|
||||
public SyncService(AppDbContext dbContext,
|
||||
IMapper mapper,
|
||||
IRequestContext requestContext,
|
||||
IMessageService messageService,
|
||||
IUserService userService) : base(dbContext, mapper)
|
||||
{
|
||||
_requestContext = requestContext;
|
||||
_userService = userService;
|
||||
_messageService = messageService;
|
||||
}
|
||||
|
||||
public async Task<List<CheckPointDTO>> GetAllCheckPointAsync()
|
||||
@@ -398,7 +400,7 @@ namespace WorkFlowCheck.BL.Services
|
||||
var deviceMessageDTO = new DeviceMessageDTO()
|
||||
{
|
||||
IsReaded = false,
|
||||
Message = "Ellenőrző lap blokkolva!",
|
||||
Message = $"Ellenőrző lap blokkolva! [{checkListHeaderDTO.DocumentNumber}]",
|
||||
SendDate = DateTime.UtcNow,
|
||||
ExtraDataJSON = "",
|
||||
RoleId = item.ParentId,
|
||||
@@ -407,6 +409,14 @@ namespace WorkFlowCheck.BL.Services
|
||||
};
|
||||
|
||||
await this.DeviceMessageSend(deviceMessageDTO);
|
||||
|
||||
var fCMMessageDTO = new FCMMessageDTO
|
||||
{
|
||||
Body = deviceMessageDTO.Message,
|
||||
Title = "Blokkolási értesítés",
|
||||
UserId = user.Id,
|
||||
};
|
||||
await _messageService.SendFCMMessageToLastToken(fCMMessageDTO);
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||
<PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
|
||||
<PackageReference Include="Google.Apis.Auth" Version="1.69.0" />
|
||||
<PackageReference Include="MailKit" Version="4.11.0" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
|
||||
<PackageReference Include="Serilog.Expressions" Version="5.0.0" />
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace WorkFlowCheck.Web.Helpers
|
||||
public static class SystemHelper
|
||||
{
|
||||
public static string DatabaseName = "";
|
||||
public static string ProgramVersion = "v1.1.022";
|
||||
public static string ProgramVersion = "v1.1.023";
|
||||
|
||||
public async static Task GetAPIInfoAsync(IConfiguration configuration)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user