使用AWS SNS在Xamarin中推送通知

rlcwz9us  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(159)

我提供了各种租赁空间,我的应用程序提供了将此空间出租给人们的功能。比方说,在我的应用程序中具有较高优先级/会员资格的用户试图预订一个空间,而该空间正被较低优先级用户使用。只要较高优先级用户按下预订按钮,我希望较低优先级用户的移动的中弹出通知。
我的应用程序是使用Xamarin表单构建的。我想使用AWS SNS推送通知,但据我所知SNS需要设备令牌来发送通知。我计划为所有用户在数据库中存储设备令牌,但我不完全确定如何根据IOS和Android环境获取设备令牌。我正在考虑使用依赖关系接口

public interface INotificationService
{
   Task<string> GetDeviceToken();
}

而且我还没有找到一个好的来源,我可以用来获得设备令牌。
有人能帮助我,并纠正我,如果它是正确的保存在数据库中的设备令牌?

fjnneemd

fjnneemd1#

我现在正在做这个。这只适用于iOS,而且对我很有效。
将其放入AppDelegate中。

public async override void RegisteredForRemoteNotifications(UIApplication application, NSData token)
{
    if (application.IsRegisteredForRemoteNotifications == true)
    {
        var snsClient = new AmazonSimpleNotificationServiceClient("your aws key id", "your aws secret key", Amazon.RegionEndpoint.YourRegion);

        /* In the AWS SNS example here - https://docs.aws.amazon.com/mobile/sdkforxamarin/developerguide/getting-started-sns-ios.html
           token.Description is used, for me the line below triggers an exception, so I used token.DebugDescription instead.
        */
        var deviceToken = token.DebugDescription.Replace("<", "").Replace(">", "").Replace(" ", "");
        if (!string.IsNullOrEmpty(deviceToken))
        {
            //register with SNS to create an endpoint ARN
            var response = await snsClient.CreatePlatformEndpointAsync(
            new CreatePlatformEndpointRequest
            {
                Token = deviceToken,
                PlatformApplicationArn = "your aws platform application arn"
            });
        }
    }
}

至于将其存储在数据库中,我还没有走那么远,但我正在考虑使用DynamoDb来实现我的特定目的。
当/如果我有Android工作,我会更新我的答案。

相关问题