2017-08-30 6 views
13

私はXamarin.FormsでOneSignalプッシュ通知を実装しようとしています。OneSignal:Xamarin.FormsアプリケーションのAppDelegateでnotificationOpenedを処理する方法は?

私はApp()のコンストラクタにOneSignal AdditionalDataによって返された文字列を渡す必要があります。

私はHandleNotificationOpened(OSNotificationOpenedResult result)を使用して通知タップを処理し、文字列を取得してLoadApplication(new App(myData))に渡しました。

Android用にはMainActivity、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); 
     } 
    } 
} 

答えて

0

。 実際、私たちはAppDelegateのfinishedLaunching()の通知タップを受け取ることができません。なぜなら、HandleNotificationOpened(HandleNotificationOpened)がiOSで正しく機能していない理由です。だから、私はそれをPCLの共通フォルダのAppクラスに実装しました。

+0

ここにコードを記入してください。 –

6

回答

オーバーライドAppDelegateDidReceivedRemoteNotificationevent

コード私は回避策を発見した

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) 
    } 
} 
関連する問題