因此,我正在为我的Xamarin.iOS项目使用Azure Notification中心。我已经按照Azure的教程设置了我的集线器并配置了必要的证书。我正在使用开发环境,并已从Notification中心发送了几个已成功收到的测试通知。
我所面临的挑战是一致性。一段时间后,设备停止接收通知。集线器上没有APNS错误,它表明所有通知都已成功发送。我不确定这些失败的原因。
还有其他人经历过这个吗?在注册过程中,我按原样使用设备令牌,而不更改它。我还在注册期间为每个用户传递了一个标签。标签只是设备令牌,它被剥夺了'< >'字符。
由于我发现通知中心没有任何错误,因此我无法确定某些通知无法访问设备的真正问题。
我还使用发布版本生成了一个adhoc ipa,我通过iTunes安装,App Store ipa仍在测试中,我通过TestFlight安装。我还应该使用沙盒环境和开发SSL证书吗?这些ipa仍然用于测试目的。我们还没有投入生产。
我真的很感激任何帮助。
以下是我的代码:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
try
{
Hub = new SBNotificationHub(ConnectionString, NotificationHubPath);
Hub.UnregisterAllAsync(deviceToken, (error) =>
{
if (error != null)
{
Console.WriteLine("Error calling Unregister: {0}", error);
return;
}
});
var newToken = FormatTheString(deviceToken.ToString());
var finalTag = newToken.Replace(" ",String.Empty);
var tags = new NSSet(finalTag); // create tags if you want
Hub.RegisterNativeAsync(deviceToken, tags, (errorCallback) =>
{
if (errorCallback != null)
Console.WriteLine("RegisterNativeAsync error: " + errorCallback);
});
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + ex.StackTrace);
}
}
更新
我已经能够确定问题所在。经过更多测试后,我发现在一些测试消息后,我的通知中心将删除注册。因此,在调试模式下进行测试时,始终会传递消息。但是,当我生成发布版本并对其进行测试时,它们会被交付一段时间,然后它们会完全失败。
这会导致Bad Channel Errors
和Invalid Channel Errors
。那么在这种情况下发生的是调试ipa注册在集线器上注册。当我删除此ipa并安装发布版本(Ad hoc或App Store版本)时,新的注册将保存在集线器上。因此,当我发送新的测试通知时,它会发送给两个'设备,在实际意义上,它只是一个设备。经过一些测试后,APN意识到注册ID无效,它会关闭连接,因此会Bad Channel Errors
。
有没有办法可以删除或覆盖集线器以前的注册?