- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个连接 Azure 后端服务的 Xamarin.iOS 应用程序,我希望我的服务向客户端应用程序发送通知。
Microsoft 文档解释了如何针对不同场景设置通知中心。我想我已经得到了大部分内容,但是我不确定我是否理解 very first part ,用于让iOS应用程序从平台通知服务Retrieve PNS Handle
,如下图所示:
看起来这是一些必须由客户端应用程序单独执行的任务,然后将其传达给后端服务进行注册。
我有一种感觉,它发生在this section的第10步。 ,当 iOS 在方法 RegisteredForRemoteNotifications
上回调应用程序时。在该回调中,应用程序将获得一个 deviceToken
:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
Hub = new SBNotificationHub(Constants.ListenConnectionString, Constants.NotificationHubName);
Hub.UnregisterAllAsync (deviceToken, (error) => {
if (error != null)
{
System.Diagnostics.Debug.WriteLine("Error calling Unregister: {0}", error.ToString());
return;
}
NSSet tags = null; // create tags if you want
Hub.RegisterNativeAsync(deviceToken, tags, (errorCallback) => {
if (errorCallback != null)
System.Diagnostics.Debug.WriteLine("RegisterNativeAsync error: " + errorCallback.ToString());
});
});
}
问题
deviceToken
是我需要发送到后端服务以启动注册过程的 PNS 句柄吗?如果没有,我该如何联系 PNS 来获取句柄?
最佳答案
信息在 documentation但对于 C# 开发人员来说,这种形式并不明显。
在 Objective-C 中,deviceToken
由 iOS 应用程序提供,正如 @LucasZ 所提到的,在它注册到 PNS 后。
但是,我不能立即发送此 deviceToken
,因为我的服务中使用的 AppleRegistrationDescription
类不会接受它。
我花了一段时间才更加熟悉 Objective-C,才发现这个 token 在发送到 Azure 之前实际上已经经过了转换:
NSSet* tagsSet = tags?tags:[[NSSet alloc] init];
NSString *deviceTokenString = [[token description]
stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
deviceTokenString = [[deviceTokenString stringByReplacingOccurrencesOfString:@" " withString:@""] uppercaseString];
我在 C# 中实现了类似的东西:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
string pnsHandle = deviceToken.Description
.Replace("<", string.Empty)
.Replace(">", string.Empty)
.Replace(" ", string.Empty)
.ToUpper();
Hub = new SBNotificationHub(Constants.ListenConnectionString, Constants.NotificationHubName);
Hub.UnregisterAllAsync (pnsHandle, (error) =>
{
if (error != null)
{
System.Diagnostics.Debug.WriteLine("Error calling Unregister: {0}", error.ToString());
return;
}
// In my use case, the tags are assigned by the server based on privileges.
NSSet tags = null;
Hub.RegisterNativeAsync(pnsHandle, tags, (errorCallback) =>
{
if (errorCallback != null)
System.Diagnostics.Debug.WriteLine("RegisterNativeAsync error: " + errorCallback.ToString());
});
});
}
要回答我的问题,是的,deviceToken
是 PNS 句柄,但必须对其进行格式化。
关于c# - 如何从平台通知服务检索 PNS 句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128708/
我设置了 Helm 柄和 Helm 柄。我有tiller-deploy。昨天,我可以定期运行了。但今天我收到此错误消息 Error: could not find a ready tiller pod
我以前已将分er安装到特定的 namespace 中。 我设置了一个环境变量来设置'tiller'命名空间-但我不记得该环境变量的名称-而且似乎无法通过网络搜索找到它。 这是什么 key ? 最佳答案
当我在 View 模型中使用如下界面时 class MainViewModel @ViewModelInject constructor( private val trafficImagesR
我正在尝试找到如何在某个 fragment 相关场景中定义 Hilt 的解决方案。我有以下设置: Activity 父 fragment 1 子 fragment 1 子 fragment 2 ...
Hilt 指出如果没有@Provides 注解就不能提供这个接口(interface): interface PlannedListRepository { fun getAllLists()
我的问题非常简单明了:两个注释/示例之间有什么区别: 例子一 @Singleton class MySingletonClass() {} @Module @InstallIn(FragmentCom
我是一名优秀的程序员,十分优秀!