Apo*_*tra 13 c# xamarin.ios xamarin xamarin.forms onesignal
我正在使用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()
代码不会被调用.
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
覆盖DidReceivedRemoteNotification
event
in AppDelegate
.
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)
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了解决方法。实际上,我们无法捕获 AppDelegate 的 finishLaunching() 上的通知点击,这就是 HandleNotificationOpened(HandleNotificationOpened) 在 iOS 中无法正常工作的原因。所以我在PCL公共文件夹App类上实现了它。
归档时间: |
|
查看次数: |
864 次 |
最近记录: |