Xamarin Forms IOS 与 Azure 通知中心
Xamarin Forms IOS with Azure Notification Hub
我知道这个问题被问过多次了。所以请耐心等待。
我正在尝试通过我的 Android / iOS 客户端使用 Xamarin Forms 实施 Azure 通知中心。
Android 一切正常,但 iOS 我没有收到任何通知。
这是我为 iOS
所做的检查清单
- 生成了证书和配置文件
- 使用 MacOS 注册证书
- 导出 p12 文件并导入到 Azure Hub
- 我也在Info.plist中添加了权限(后台远程通知)
- Entitlements.plist 文件没有变化
- 我能够从 APN 服务获取设备令牌
- 获得令牌后我可以注册到 Azure Hub
但是我无法收到任何通知,而且 none 的函数被调用了(DidRegisterUserNotificationSettings,WillPresentNotification,ReceivedRemoteNotification,DidRegisterUserNotificationSettings,FailedToRegisterForRemoteNotifications,DidReceiveRemoteNotification)
但是RegisteredForRemoteNotifications
被调用了
我还测试了 devicetoken,有或没有从中删除 '<> '
但没有成功。
可能是什么问题?
这是我的代码
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
GlobalVariables.Instance.PnsToken = deviceToken.Description
.Replace("<", string.Empty)
.Replace(">", string.Empty)
.Replace(" ", string.Empty)
.ToUpper();
RegisteredForHub(application, deviceToken);
}
public void RegisteredForHub(UIApplication application, NSData deviceToken)
{
string pnsHandle = deviceToken.Description
.Replace("<", string.Empty)
.Replace(">", string.Empty)
.Replace(" ", string.Empty)
.ToUpper();
_hub = new SBNotificationHub(Constant.ListenConnectionString, Constant.NotificationHubName);
_hub.UnregisterNative((error) =>
{
if (error != null)
{
Debug.WriteLine($"Unable to call unregister Native {error}");
}
});
_hub.UnregisterTemplate("defaultTemplate",(error) =>
{
if (error != null)
{
Debug.WriteLine($"Unable to call unregister Template {error}");
}
});
// update registration with Azure Notification Hub
_hub.UnregisterAll(deviceToken, (error) =>
{
if (error != null)
{
Debug.WriteLine($"Unable to call unregister {error}");
return;
}
var tags = new NSSet(Constant.SubscribeTags);
_hub.RegisterNative(pnsHandle, tags, (errorCallback) =>
{
if (errorCallback != null)
{
Debug.WriteLine($"RegisterNativeAsync error: {errorCallback}");
}
});
var templateExpiration = DateTime.Now.AddDays(120)
.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("en-US"));
//_hub.RegisterTemplate(deviceToken, "defaultTemplate", Constant.ApnTemplateBody, templateExpiration,
// tags, (errorCallback) =>
// {
// if (errorCallback != null)
// {
// Debug.WriteLine($"RegisterTemplateAsync error: {errorCallback}");
// }
// });
});
经过大量试验和错误以及谷歌搜索这么多小时。我发现问题出在 Azure 上。
我上传了正确的证书,但密码是一个字符,因此没有发送通知。
如果用户为其证书文件输入了错误的密码,Azure 应提示用户输入 APN。
我知道这个问题被问过多次了。所以请耐心等待。
我正在尝试通过我的 Android / iOS 客户端使用 Xamarin Forms 实施 Azure 通知中心。
Android 一切正常,但 iOS 我没有收到任何通知。
这是我为 iOS
所做的检查清单- 生成了证书和配置文件
- 使用 MacOS 注册证书
- 导出 p12 文件并导入到 Azure Hub
- 我也在Info.plist中添加了权限(后台远程通知)
- Entitlements.plist 文件没有变化
- 我能够从 APN 服务获取设备令牌
- 获得令牌后我可以注册到 Azure Hub
但是我无法收到任何通知,而且 none 的函数被调用了(DidRegisterUserNotificationSettings,WillPresentNotification,ReceivedRemoteNotification,DidRegisterUserNotificationSettings,FailedToRegisterForRemoteNotifications,DidReceiveRemoteNotification)
但是RegisteredForRemoteNotifications
被调用了
我还测试了 devicetoken,有或没有从中删除 '<> '
但没有成功。
可能是什么问题?
这是我的代码
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
GlobalVariables.Instance.PnsToken = deviceToken.Description
.Replace("<", string.Empty)
.Replace(">", string.Empty)
.Replace(" ", string.Empty)
.ToUpper();
RegisteredForHub(application, deviceToken);
}
public void RegisteredForHub(UIApplication application, NSData deviceToken)
{
string pnsHandle = deviceToken.Description
.Replace("<", string.Empty)
.Replace(">", string.Empty)
.Replace(" ", string.Empty)
.ToUpper();
_hub = new SBNotificationHub(Constant.ListenConnectionString, Constant.NotificationHubName);
_hub.UnregisterNative((error) =>
{
if (error != null)
{
Debug.WriteLine($"Unable to call unregister Native {error}");
}
});
_hub.UnregisterTemplate("defaultTemplate",(error) =>
{
if (error != null)
{
Debug.WriteLine($"Unable to call unregister Template {error}");
}
});
// update registration with Azure Notification Hub
_hub.UnregisterAll(deviceToken, (error) =>
{
if (error != null)
{
Debug.WriteLine($"Unable to call unregister {error}");
return;
}
var tags = new NSSet(Constant.SubscribeTags);
_hub.RegisterNative(pnsHandle, tags, (errorCallback) =>
{
if (errorCallback != null)
{
Debug.WriteLine($"RegisterNativeAsync error: {errorCallback}");
}
});
var templateExpiration = DateTime.Now.AddDays(120)
.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("en-US"));
//_hub.RegisterTemplate(deviceToken, "defaultTemplate", Constant.ApnTemplateBody, templateExpiration,
// tags, (errorCallback) =>
// {
// if (errorCallback != null)
// {
// Debug.WriteLine($"RegisterTemplateAsync error: {errorCallback}");
// }
// });
});
经过大量试验和错误以及谷歌搜索这么多小时。我发现问题出在 Azure 上。
我上传了正确的证书,但密码是一个字符,因此没有发送通知。
如果用户为其证书文件输入了错误的密码,Azure 应提示用户输入 APN。