gpt4 book ai didi

c# - OneSignal:如何处理在 Xamarin.Forms 应用程序的 AppDelegate 中打开的通知?

转载 作者:可可西里 更新时间:2023-11-01 08:11:25 24 4
gpt4 key购买 nike

我正致力于在 Xamarin.Forms 中实现 OneSignal 推送通知。

我需要传递 OneSignal AdditionalData 返回的字符串进入 App() 的构造函数.

所以我用了HandleNotificationOpened(OSNotificationOpenedResult result)用于处理通知点击并获取字符串,然后将其传递给 LoadApplication(new App(myData)) .

为此,我将代码写在MainActivity中。适用于 Android 和 AppDelegate适用于 iOS。

Android 一切正常;即 HandleNotificationOpened()获取了 additionalData并将其传递给 LoadApplication(new App(myData)) .

但在 iOS 中,当我打开通知时,HandleNotificationOpened()不调用代码。

AppDelegate.cs

static string s = null;

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
OneSignal.Current.StartInit("MyKey").HandleNotificationOpened(HandleNotificationOpened).EndInit();

if(s!=null)
{
LoadApplication(new App(s));
}
else
{
LoadApplication(new App("myUrl.lasso"));
}

return base.FinishedLaunching(app, options);
}

private static void HandleNotificationOpened(OSNotificationOpenedResult result)
{
OSNotificationPayload payload = result.notification.payload;
Dictionary<string, object> additionalData = payload.additionalData;

if (additionalData != null)
{
if (additionalData.ContainsKey("url_direct"))
{
s = additionalData["url_direct"].ToString();
System.Diagnostics.Debug.WriteLine("We need to redirect it to: " + s);
}
}
}

最佳答案

回答

覆盖 AppDelegate 中的 DidReceivedRemoteNotification 事件

代码

public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, System.Action<UIBackgroundFetchResult> completionHandler)
{
base.DidReceiveRemoteNotification(application, userInfo, completionHandler);

NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary;

string alert = string.Empty;
if (aps.ContainsKey(new NSString("alert")))
alert = (aps [new NSString("alert")] as NSString).ToString();

if (application.ApplicationState == UIApplicationState.Active)
{
//app is currently active, you can get your payload (userInfo) data here
}
else if (application.ApplicationState == UIApplicationState.Background)
{
//app is in background, you can get your payload (userInfo)
}
else if (application.ApplicationState == UIApplicationState.Inactive)
{
//app is transitioning from background to foreground (user taps notification), do what you need when user taps here, you can get your payload (userInfo)
}
}

关于c# - OneSignal:如何处理在 Xamarin.Forms 应用程序的 AppDelegate 中打开的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45952602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com