【发布时间】:2017-03-26 12:14:25
【问题描述】:
我们使用我们的生产 APNS 证书设置了一个 Azure 通知中心,并在生产模式下配置了 APNS。
我们将我们的测试设备(使用 TestFlight / Production 构建和证书)注册到 APNS,然后使用标签 dealer-1 注册到 ANH。当直接使用 APNS 时,我们可以使用我们的生产证书和注册的设备 ID 成功发送通知,但是,当我们使用“测试发送”时,我们会收到一个“成功发送”到 1 个设备(或者我们注册的设备)。未收到通知。如果我们再次运行“测试发送”,则有 0 个设备要发送到。
在日志中,我们看到每个设备的“APNS 错误”,每个测试发送。我看不到任何方法可以查看实际的错误,所以这是一个绝对无用的指标。
我已经完成了所有故障排除步骤,并多次确认一切都已在“生产”中设置。
查看其他问题后,答案大致如下:
- .. 注册沙盒证书,然后将其更改为生产。不幸的是,我们从头开始创建了这个中心作为生产中心,试图解决这个潜在的问题。
- .. 根据生产证书注册沙盒设备(以及令牌)。不幸的是,我对此进行了严格控制,并确保我们只针对 ANH 注册 TestFlight 构建(因此是生产)。
- .. 上传错误的证书。如上所述,我已通过推送通知测试器确认证书是正确的(指纹确认、重新上传等),并且可以通过生产 APNS 端点发送到设备。
资源名称为:八技术/react-push-notification-hub
应用内注册流程如下:
- 推送通知的设备注册
-
在 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"); }); } }
【问题讨论】:
标签: ios azure apple-push-notifications xamarin.forms azure-notificationhub