我们使用我们的生产APNS证书设置了Azure通知集线器,并在生产模式下配置了APNS。 我们将我们的测试设备(使用TestFlight/Production构建和证书)注册到APNS,然后使用标签dealer-1
注册到ANH。当我们直接使用APNS时,我们可以使用我们的生产证书和注册设备ID发送通知,但是当我们使用'测试发送'时,我们会向1台设备(或我们注册的许多设备)发送'成功发送'。通知未收到。如果我们再次运行'测试发送',则发送0个设备。通知集线器设备在推送(APNS)后消失
在日志中,我们看到每个设备的“APNS错误”,每次发送测试。我看不出有什么办法可以查看错误的实际情况,所以这是绝对无用的指标。
我已经完成了所有故障排除步骤,并确认了许多次在“生产”中设置了所有内容。
在审查其他问题,答案一直沿着线:
- ..注册一个沙箱证书,然后将其更改为生产。不幸的是,我们从头开始创建了这个中心作为生产,试图解决这个潜在问题。
- ..在生产证书上注册沙箱设备(以及令牌)。不幸的是,我已经严密地控制了这一点,并确保我们只针对ANH注册TestFlight构建(因此生产)。
- ..上传错误的证书。如上所述,我已通过推送通知测试人员确认证书是正确的(指纹确认,重新上传等),并可通过生产APNS端点发送到设备。
资源名称是:八技术/反应推通知业务的集线器
在应用内的注册过程如下:
- 推送通知设备寄存器
注册事件在iOS项目(AppDelegate事件)中处理..
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { //base.RegisteredForRemoteNotifications(application, deviceToken); App.ConfigurePushNotifications(deviceToken.ToString()); }
- 个
ConfigurePushNotifications是在XF共享项目..
public static void ConfigurePushNotifications(string deviceToken) { var azureComm = DependencyService.Get<Interop.IAzureCommunication>(); azureComm.RegisterForPushTags( "sb://eight-technology.servicebus.windows.net/", ".. token ..", "react-push-notification-hub", deviceToken, StateManager.SelectedNodes.Select(m => "dealer-" + m).ToArray()); }
的实施是相当多按提供的示例代码(包含在iOS的项目)
public class AzureCommunication : DealerwebReact.Interop.IAzureCommunication { public void RegisterForPushTags(string url, string key, string hubName, string deviceToken, string[] tags) { var cs = SBConnectionString.CreateListenAccess(new NSUrl(url), key); var hub = new SBNotificationHub(cs, hubName); hub.RegisterNativeAsync(deviceToken, new NSSet(tags), err => { if (err != null) Console.WriteLine("Error: " + err.Description); else Console.WriteLine("Success"); }); } }
感谢尼基塔 - 这是我合作过有关指导是。我会用一些代码更新我的帖子,但我根本不操纵APN令牌,它直接作为NSString传递给你的类。当我登录时,它的格式为'<... ... ...>',我认为这是正确的,因为这是我可以在APNS测试仪中使用的。你需要改变吗? –
提供的代码 - 在注册时非常简单。任何想法将不胜感激。示例设备令牌是:'<97e0614c 3c18b3d7 a8d5274b ca7037dc 3e00e703 635d5172 3c755d9c 8616f375>' –
@RudiVisser到目前为止您还没有看到您的问题。我实际上会去除小于和大于字符以及像这样的任何空格:'deviceToken.ToString()。Replace(“<”,string.Empty).Replace(“>”,string.Empty).Replace(“ “,string.Empty);' – hvaughan3