2017-08-30 16 views
13

Tôi đang làm việc để triển khai thông báo đẩy OneSignal trong Xamarin.Forms.OneSignal: Cách xử lý thông báoMở trong AppDelegate của ứng dụng Xamarin.Forms?

Tôi cần chuyển chuỗi được OneSignal trả về AdditionalData vào hàm tạo của App().

Vì vậy, tôi đã sử dụng HandleNotificationOpened(OSNotificationOpenedResult result) để xử lý nhấn thông báo và tìm nạp chuỗi rồi chuyển nó đến LoadApplication(new App(myData)).

Vì vậy, cho điều này, tôi đã viết mã trong MainActivity cho Android và trong AppDelegate cho iOS.

Mọi thứ đều hoạt động tốt cho Android; ví dụ: HandleNotificationOpened() tìm nạp additionalData và chuyển nó đến LoadApplication(new App(myData)).

Nhưng trong iOS, khi tôi mở thông báo, mã số HandleNotificationOpened() không được gọi.

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

Trả lời

0

Tôi đã tìm thấy một công việc xung quanh. Trên thực tế, chúng tôi không thể nắm bắt thông báo tap trên AppDelegate's finishLaunching() đó là lý do tại sao HandleNotificationOpened (HandleNotificationOpened) không hoạt động đúng trong iOS. Vì vậy, tôi đã thực hiện nó trên PCL chung thư mục App class.

+0

Vui lòng chia sẻ mã của bạn tại đây. –

6

trả lời

Override các DidReceivedRemoteNotificationevent trong 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) 
    } 
} 
Các vấn đề liên quan