簡體   English   中英

OneSignal:如何處理Xamarin.Forms應用程序的AppDelegate中的notificationOpened?

[英]OneSignal: How to Handle notificationOpened in AppDelegate of a Xamarin.Forms app?

我正在使用Xamarin.Forms實現OneSignal推送通知。

我需要將OneSignal AdditionalData返回的字符串傳遞給App()的構造函數。

所以我使用HandleNotificationOpened(OSNotificationOpenedResult result)來處理通知點擊並獲取字符串,然后將其傳遞給LoadApplication(new App(myData))

因此,我已經在Android的MainActivity和iOS的AppDelegate編寫了代碼。

一切都適用於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);
        }
    }
}

回答

覆蓋AppDelegateDidReceivedRemoteNotification event

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)
    }
}

我找到了解決辦法。 實際上我們無法捕獲AppDelegate的finishedLaunching()上的通知,這就是為什么HandleNotificationOpened(HandleNotificationOpened)在iOS中無法正常工作。 所以我在PCL公共文件夾App類上實現了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM