gpt4 book ai didi

c# - 如何从平台通知服务检索 PNS 句柄?

转载 作者:行者123 更新时间:2023-12-02 06:08:08 27 4
gpt4 key购买 nike

我有一个连接 Azure 后端服务的 Xamarin.iOS 应用程序,我希望我的服务向客户端应用程序发送通知。

Microsoft 文档解释了如何针对不同场景设置通知中心。我想我已经得到了大部分内容,但是我不确定我是否理解 very first part ,用于让iOS应用程序从平台通知服务Retrieve PNS Handle,如下图所示:

enter image description here

看起来这是一些必须由客户端应用程序单独执行的任务,然后将其传达给后端服务进行注册。

我有一种感觉,它发生在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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com