即使我没有在我的应用程序中使用 APNS,来自苹果的 APNS 警告

Posted

技术标签:

【中文标题】即使我没有在我的应用程序中使用 APNS,来自苹果的 APNS 警告【英文标题】:APNS warning from apple even though I am not using APNS in my app 【发布时间】:2017-08-16 06:34:20 【问题描述】:

缺少推送通知权利 - 您的应用似乎注册了 Apple 推送通知服务,但应用签名的权利不包括“aps-environment”权利。如果您的应用程序使用 Apple 推送通知服务,请确保您的应用程序 ID 在配置门户中启用推送通知,并在使用包含“aps-environment”权利的分发配置文件签署您的应用程序后重新提交。 Xcode 8 不会在构建时自动从配置文件中复制 aps-environment 权利。这种行为是故意的。要使用此权利,请在项目编辑器的“功能”窗格中启用推送通知,或手动将权利添加到您的权利文件中。如需更多信息,请参阅https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1。

当我上传构建以进行试飞时,我收到了来自 Apple 的以下邮件。

自从我集成了 google sdk 并在我的应用中实现了 google 登录后,这种情况就一直在发生。

我没有在我的应用程序中启用推送通知,证书也没有任何问题。即使在功能选项卡中,推送通知也已关闭

我似乎不明白问题出在哪里。我不想启用推送通知,因为我没有在我的应用中使用它。

任何帮助将不胜感激。谢谢。

以下是我的 AppDelegate 供参考

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate, GIDSignInUIDelegate 
    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        let console = ConsoleDestination()
        log.addDestination(console)
        Mixpanel.initialize(token: AppConfig.mixPanelProjectToken)
        var configureError: NSError?
        GGLContext.sharedInstance().configureWithError(&configureError)

        if MixpanelTweaks.assign(MixpanelTweaks.showView) 
            navigateToView()

        

        if  let infoPlist = Bundle.main.infoDictionary,
            let config = infoPlist["TwitterKeys"] as? Dictionary<String, AnyObject> 
            let consumer = config["consumerSecret"] as? NSString
            let consumerSecret = config["ConsumerKey"] as? NSString
            Twitter.sharedInstance().start(withConsumerKey:consumerSecret as! String, consumerSecret:consumer as! String)
        


        // Override point for customization after application launch.
        return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    

    func navigateToView()
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "InitialViewNavigationController")
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
    
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool 
        let handled = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])

        GIDSignIn.sharedInstance().handle(url,
                                          sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                          annotation: [:])

        Twitter.sharedInstance().application(app, open: url, options: options)
        return handled
    
    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) 

    

    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) 
    

    func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!,
                withError error: NSError!) 
    

    func applicationWillResignActive(_ application: UIApplication) 

        FBSDKAppEvents.activateApp()
    


    func applicationDidEnterBackground(_ application: UIApplication) 


    

    func applicationWillEnterForeground(_ application: UIApplication) 

    

    func applicationDidBecomeActive(_ application: UIApplication) 

    

    func applicationWillTerminate(_ application: UIApplication) 
        GIDSignIn.sharedInstance().signOut()

       

【问题讨论】:

您检查过功能选项卡吗? 您的应用程序包是否包含任何使用推送通知的库? APNS 在功能选项卡中关闭 + 确保只调用一次 [registerUserNotificationSettings:] + 根本不要从 -[AppDelegate application:didFinishLaunchingWithOptions:] 调用它,因为它无法显示权限对话框。 我没有在我的应用中使用这个方法 [registerUserNotificationSettings:] 【参考方案1】:

我遇到了同样的问题。但是我的应用程序是一种模块化构建,它具有推送通知代码,但使用我的代码中的一个键明确禁用。每当我需要使用推送通知功能时。我只需要启用该密钥并包含“功能”选项卡中的推送通知权利。

由于那里存在代码,因此我收到了警告,

“缺少推送通知权利 - 您的应用程序包含一个 API,用于 Apple 的推送通知服务,但 aps-environment 权利 应用的签名中缺少。”

。所以我从 Capabilities 中启用了它,但没有从代码中启用它,也没有包含在 Developer Portal/Member Center 的我的 App ID 中。

它成功了,我没有收到任何警告,我的应用在 App Store 上成功运行。

尽管来自 Apple 的此警告已开始来自 Xcode 8。您还可以从以下链接中找到另一个类似的警告和“缺少推送通知权利”的解决方案:

Xcode 8 "the aps-environment entitlement is missing from the app's signature" on submit

【讨论】:

【参考方案2】:

这是一个没什么汉堡。在添加 Sentry 作为依赖项后,我得到了这个。但是我自己的本机代码没有调用远程通知。我收到了同样的警告,但我只是在发行说明中向审核团队解释了它,并且构建按预期获得了批准。

【讨论】:

以上是关于即使我没有在我的应用程序中使用 APNS,来自苹果的 APNS 警告的主要内容,如果未能解决你的问题,请参考以下文章

私人 APNS 服务器?

即使连接到 APNS,也不会为生产发送推送通知 [重复]

APNS:不适用于 Windows 服务器

带有 APNS 锐利的苹果推送通知

Windows azure 中的 APNS

Pushsharp Apns 通知错误:“InvalidToken”