gpt4 book ai didi

c# - 未使用 Azure 通知中心在 iOS 上接收推送通知 - 未调用 didReceiveRemoteNotification

转载 作者:行者123 更新时间:2023-11-30 15:01:01 24 4
gpt4 key购买 nike

我已关注这些通知中心资源,但未能在我的 iOS 设备上成功接收推送通知。

我已经检查、重新检查、再检查我的设置:

  1. 创建了新的通知中心:myhubname
  2. 已执行所有证书配置步骤。 Development Push SSL Certificate
  3. 导出私有(private)证书并上传到沙盒下的通知中心,以确保使用正确的 APS 网关
  4. 下载了配置文件,它与我的项目的包 ID 相匹配,自动检测代码签名,并成功编译。请勿使用“V2D7FJQXP”。如果您想知道,您的应用程序 ID 中会显示此字符串:V2D7FJQXP.com.yourcompany.yourproject
  5. 在物理设备上运行 - 而不是在模拟器下

生成推送通知的演示应用程序:

while (true)
{
string connectionString = ServiceBusConnectionStringBuilder.CreateUsingSharedAccessSecretWithFullAccess("myhubname-ns", "…snip");
var hubClient = NotificationHubClient.CreateClientFromConnectionString(connectionString, "myhubname");
var iosPayload = AppleNotificationJsonBuilder.Create("Hello!");
iosPayload.CustomFields.Add("inAppNotification", "Hello!");
hubClient.SendAppleNativeNotification(iosPayload.ToJsonString());

Console.WriteLine("Sent");

Thread.Sleep(20000);
}

不会产生任何异常或问题。修改任何命名空间、键或集线器名称都会导致引发异常,并且来自 Azure 的 fiddler 响应代码是 2xx,因此一切看起来都很好。

我看到按照下面的代码正确注册:

  • 我在设备上接受了推送通知
  • 我看到一次 createDefaultRegistrationWithTags 调用,然后看到在后续调用中存在为 true。
  • 没有调用 didFailToRegisterForRemoteNotificationsWithError,这是正常的
  • 在此处的代码示例中:http://msdn.microsoft.com/library/jj927168.aspx ,我已将 sb://替换为 https://,否则会抛出异常。我认为这不是问题

:

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken {
NSString* connectionString = [SBConnectionString stringWithEndpoint:@"https://gift-ns.servicebus.windows.net/" listenAccessSecret:@"…snip"];
self.hub = [[SBNotificationHub alloc] initWithConnectionString:connectionString notificationHubPath:@"gift-usw-dev"];
[self.hub refreshRegistrationsWithDeviceToken:deviceToken completion:^(NSError* error) {
if (error == nil) {
[self.hub defaultRegistrationExistsWithCompletion:^(BOOL exists, NSError* error2) {
if (error2 == nil) {
if (!exists) {
[self.hub createDefaultRegistrationWithTags:nil completion:^(NSError* error3) {
if (error3 != nil) {
NSLog(@"Error creating default registration: %@", error3);
}
}];
}
} else {
NSLog(@"Error retrieving default registration: %@", error2);
}
}];
} else {
NSLog(@"Error refreshing device token: %@", error);
}
}];
}

启动演示应用程序,然后运行 ​​iOS 应用程序后,这是生成的仪表板,我不知道如何有效阅读。 enter image description here

我认为我的证书不正确,或者 Azure 和 APS 之间丢失了某些内容,因此我深入研究了 APS 服务的故障排除,并发现了以下内容:http://developer.apple.com/library/ios/#technotes/tn2265/_index.html并跳转到连接推送服务时出现问题

部分

并运行此命令:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert YourSSLCertAndPrivateKey.pem -debug -showcerts -CAfile server-ca-cert.pem

但是我没有 .pem 文件(OSX),所以我找到了这个命令来获取它们:

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

其中 keyStore.pfx 是从推送通知证书的钥匙串(keychain)导出的 .p12 的重命名版本。

该命令运行良好。发生了什么事?

最佳答案

我在服务总线团队中负责通知中心功能。正如您已经发现的,有效负载的格式不正确。

CustomFields 采用 JSON 编码字符串,以便您可以将整数和对象设置为自定义字段,例如:iosPayload.C​​ustomFields.Add("inAppNotification", "{\"my\": {\"new\": "jsonObject"}}");

所以如果你想添加一个字符串,你必须输入一个 json 编码的字符串。iosPayload.C​​ustomFields.Add("inAppNotification", "\"你好!\"");

鉴于困惑,我们可能会考虑更改此行为,或在序列化时添加 JSON 安全检查。

关于通知中心仪表板。当 APN 接受通知时,通知中心会报告成功的通知。您还可以可视化“无效负载”图表,该图表将显示 APN 是否拒绝了来自通知中心的通知。

不幸的是,除了在应用程序运行时使用回调捕获通知之外,我不知道还有什么方法可以监视设备上的流量:didReceiveRemoteNotification。

关于c# - 未使用 Azure 通知中心在 iOS 上接收推送通知 - 未调用 didReceiveRemoteNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719297/

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