2017-06-29 49 views
0

我们在iPhone上发现了一个非常奇怪的问题,设备只是没有收到远程通知,但注册工作正常。我们检查了所有证书和配置文件,并试图直接从Azure发送测试通知,这与我们的api发送的结果相同。当从HockeyApp安装应用程序时,通知工作正常。在调试DidReceiveRemoteNotification方法只是没有调用。iPhone在调试模式下没有收到Notificatins

public override async void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler) 
{ 
    // Opened by push notification. 
    if (application.ApplicationState == UIApplicationState.Background || application.ApplicationState == UIApplicationState.Inactive) 
    { 
      // Make userInfo readable. 
      PushNotification notification = CrossDevice.Current.ConvertToNotification(userInfo); 
    } 

     // Process notification so we can attach to it's received event.        
     CrossAzurePushNotifications.Platform.ProcessNotification(userInfo); 

    // No data is altered.         
    completionHandler(UIBackgroundFetchResult.NoData); 
} 

注:我们正在使用AzurePushNotifications插件

xamarin forum question

+0

您使用的是iPhone设备用于测试的通知或iOS模拟器? – ganchito55

+1

通知不通过模拟器,因此您必须使用实际的苹果设备,其次,您的通知中心必须设置为“沙盒”模式(理想情况下,尽管生产的确支持开发和发布)。 – Digitalsa1nt

+0

我们使用物理设备,通知集线器被设置为具有相应证书的生产。它从一开始就是这样配置的。问题在于通知在数周前使用集线器的相同设置进行工作,同时发生了debbuging。我敢肯定,这不是因为应用程序中的代码更改,因为我检查了旧版本也得到了相同的结果。 – Mony

回答

0

您应该使用 '沙盒' 以与连接调试测试。有关沙箱与生产的更多信息,请参阅this linkthis link

请注意,在Azure NotificationHub中从生产切换到沙箱并不总是有效。最好的解决方案是为测试和生产创建一个单独的通知中心。

+0

你和@伊万都是对的。在创建新的生产中心并确保第一个设置为沙箱通知后,也可以在调试模式下工作。然而,我仍然不清楚为什么它以前工作。我确定我们只使用一个集线器,并且只使用一个证书和临时供应配置文件。 – Mony

+0

我很高兴你的问题解决了。我不知道为什么它以前工作。也许苹果更新了他们的服务器或类似的东西。但是,这应该是。 – Tom

0

您需要两个通知中心:一个用于测试,一个用于生产。

如果您正在从Xcode开发和运行应用程序,则必须使用带有测试证书的测试Hub,并且要将其上载到Apple Store或TestFlight时,必须更改URL并使用Production枢纽。如果不是,那就没有工作了。

你需要不同的证书,您可以检查这里的过程:https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-ios-apple-push-notification-apns-get-started

这里是当你决定你有什么样的证书可供选择:https://docs.microsoft.com/en-us/azure/includes/media/notification-hubs-enable-apple-push-notifications/notification-hubs-appid-create-cert.png