如何在Xamarin中拦截AWS SNS消息到iOs移动终端?

时间:2018-02-12 00:28:44

标签: amazon-web-services xamarin.ios amazon-sns

AWS -SNS上有关在Xamarin iOS项目中使用SNS的文档显示了如何注册iOS设备以接收来自SNS的消息,但不清楚如何拦截应用程序内的这些消息并以编程方式响应消息。如何捕获传入的消息并进行适当的处​​理,而不仅仅是显示收到的消息文本?这是通过发送与AWS控制台中显示的不同的消息来完成的,我可以在哪里拦截它在我的应用程序中?

这是我一直关注的例子:

public override bool FinishedLaunching(UIApplication app, NSDictionary options) {
// do something
var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
  UIUserNotificationType.Alert |
  UIUserNotificationType.Badge |
  UIUserNotificationType.Sound,
  null
);
app.RegisterUserNotifications(pushSettings);
app.RegisterForRemoteNotifications();
// do something
  return true;
}

public override void RegisteredForRemoteNotifications(UIApplication application, NSData token) {
  var deviceToken = token.Description.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 = "YourPlatformArn" /* insert your platform application ARN here */
    });
  }
}

以下是我发送的信息:

{
"APNS_SANDBOX":"{\"aps\":{\"alert\":\"This is my message\"}}"
 } 

这似乎可以很好地显示从AWS控制台发送的文本消息,无论应用程序是否正在运行,但这不是我的应用程序所需要的。 (例如国际象棋应用程序,其中SNS消息用于交换由一对用户进行的移动,并且应用程序显示它们。)

FinishedLaunching方法包含几个不完全有用的&#34;做某事&#34; ,但是我无法弄清楚如何在接收到特定消息时调用我的PCL中的某些方法,并将消息内容传递给该方法。

1 个答案:

答案 0 :(得分:1)

您可以在DidReceiveRemoteNotification()订阅AppDelegate.cs活动,以获取您在SNS上发送的内容。

public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
    // retrieve something from a server somewhere
}

当用户点击通知以打开应用以及此应用处于后台状态或前景状态时,将触发此事件。

如果此应用关闭,则此事件不会触发,但我们也可以使用参数public override bool FinishedLaunching(UIApplication app, NSDictionary options)获取options中的内容。

此外,如果你想在PCL中获取它,我们可以制作一个MessagingCenter来实现这个目标:

在原生平台上发送内容:

MessagingCenter.Send<object, NSDictionary>(this, "Notification", userInfo);

然后在您喜欢的某个地方的PCL上收到此MessagingCenter

MessagingCenter.Subscribe<object, NSDictionary>(this, "Notification", (sender, dic) =>
{
});