如何检查iOS发布配置文件是否启用推送通知?

10

我有一个应用程序,原本应该启用推送通知,但由于某种原因没有启用。我看到其他人下载并安装该应用程序,它甚至不提示他们允许发送推送通知的权限。预期地,此应用程序不会出现在他们的“设置”>“通知”中。

然而,在我的iPad上,我能够从这个应用程序接收推送通知,并且它确实出现在我的“设置”>“通知”中。我已经删除并重新安装了应用程序,以确保我拥有每个人都有的相同版本(并非开发版本),但我仍然能够接收通知。

现在,这个应用程序是为一个客户编写的,客户向我发送了所有的配置文件(dev、adhoc、distribution),以及发送推送通知所需的文件,因此我无法确定是否一切都正确创建了。

我目前的理论是:

  • 我收到的adhoc配置文件是"正确创建的"(即在Provisioning Portal中设置了App ID的APNs后生成)
  • 我收到的distribution配置文件是在设置APNs之前生成的(因此,它没有启用"推送通知")
  • 我能够在设备上接收到推送通知的原因是,在开发过程中我安装了adhoc版本,这提示我允许接收推送通知的权限,即使我已经删除了adhoc版本并下载了商店版本,设备也已经"缓存"了我愿意接收通知的事实,不再提示我。我已经检查了其他应用程序,实际上,在我删除并重新安装它们之后,它们不会再次提示我是否允许接收推送通知的权限。

所以我的问题是:

  • 这个理论有道理吗?
  • 如果有,这意味着我需要要求客户生成一个新的distribution配置文件。如何验证此配置文件已启用"推送通知"(即考虑到我不能只安装使用它编译的应用程序)?
4个回答

23

好的,我可能已经找到了一种验证配置文件是否启用推送的方法。

如果我将.mobileprovision文件作为文本文件打开,那里会有一些XML(显然是一个plist),我猜测对于一个分发配置文件来说应该有这个:

<key>aps-environment</key>
<string>production</string>

的确,Adhoc配置文件有这个东西,而分发配置文件没有,所以...我猜这就是问题所在。

不过,任何反馈都会很有帮助 :)


2
查看配置文件中的XML部分的简单方法是在Terminal.app中运行以下命令:security cms -D -i /path/to/AppStoreProfile.mobileprovision,然后查找相同的aps-environment密钥。 - Tal

7
稍有不同,但仍然有用:当您将应用程序上传到iTunes Connect时,可以检查它是否启用了推送通知(或任何其他权限)。
要做到这一点,请转到“管理您的应用程序”,选择该应用程序,然后转到要检查的版本的“查看详细信息”。
从那里,转到“二进制详细信息”页面 - 有一个显示二进制文件具有哪些权限的“权限”字段。如果启用了推送通知,则会在其中看到一个“aps-environment: production”行。

0

确保在创建 aps_certificate 后生成分发配置文件。有很高的可能性会因此更改而错过 aps-environment


0
我在AppDelegate.m中添加了以下内容,以便在调试时查看启用的确切设置
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
NSLog(@"Receiving Notification Types: %lu", (long)enabledTypes); //0=none 1=badge 2=sound 4=alert 8=NewsStandContantAvailability

我从一个非常包容和有用的链接中获得了这个: Apple Push Notification Service Tutorial - Part 1 它对我来说非常有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接