5

我已经为此奋斗了一段时间,但我终于屈服于提交一个问题,看看其他人是否有问题。

本质上,我正在尝试使用 Facebook 分析推送服务,但似乎只是在某些时候收到推送通知。我一直在使用 charles 代理拦截 API 调用,以确保 Facebook SDK 正确发送推送令牌并按预期记录事件。从这个角度来看,一切都很好。

接下来,我使用设置页面上的“推送活动设置验证”来尝试发送推送和应用内推送测试,这些测试在我的 3 台测试设备上也可以正常工作(卡在设备上正确显示等)使用。

当尝试创建一个活动以将推送发送到设备的某个部分时,就会出现问题。我尝试使用的第一台设备完全没有问题,但随后的设备(根本没有更改代码库)不会收到来自我设置的任何活动的任何推送。我的目标受众是“设备操作系统是 iOS”,所以我希望所有 iOS 设备都会收到来自该活动的推送。这似乎有点奇怪,所以我从所有设备上删除了该应用程序并重新构建它们(确保测试推送在所有设备上都有效)并再次设置活动,但这一次即使是第一台设备也不再有效。在事件调试器中,我收到一个“推送通知错误”和一个“InvalidDeviceOS”的error_message,这根本没有意义。

几个小时以来,我一直在第四次这样做,但没有成功。我可以看到发送到 Facebook 的令牌,我可以看到事件调试器中记录的事件,我可以在设置中使用推送测试服务,并且所有设备都可以毫无问题地接收推送,但是一旦我尝试使用竞选我一无所获。

为了完成目的,这里是我正在使用的代码片段:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // ...
    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))
    // ...
}

func application(application: UIApplication, didRegisterUserNotificationSettings settings: UIUserNotificationSettings) {
    UIApplication.sharedApplication().registerForRemoteNotifications()
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

    FBSDKAppEvents.setPushNotificationsDeviceToken(deviceToken)
}

最后,这是在 3 个不同设备上打开全新安装后的事件调试器(请参阅第一个启动事件,2 个应用程序启动具有 ID,1 个没有,因为它尚未登录)。

在此处输入图像描述

对此的任何帮助都会很棒,谢谢。

更新:我创建了一个全新的应用程序和一个全新的 Facebook 分析实例、新的推送证书等。最初我开始接收来自活动的推送,但是一旦我删除并重新安装了应用程序,活动消息又开始失败。然后我将它安装到不同的设备上并克隆了现有的活动并再次尝试。然后,这导致原始设备获得推送,但新设备没有……令人难以置信!

现在我不知道发生了什么事。从表面上看,一旦从 APNS 返回推送错误,Facebook 服务似乎会变得不稳定,但实际上很难证明这一假设,因为事件调试器中的错误报告几乎没有用。

再次为了完整起见,这里是新应用程序的代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

    application.registerUserNotificationSettings(UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil))

    return true
}

func applicationDidBecomeActive(_ application: UIApplication) {

    FBSDKAppEvents.activateApp()
}

// MARK: Notification Methods

func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {

    application.registerForRemoteNotifications()
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    FBSDKAppEvents.setPushNotificationsDeviceToken(deviceToken)
    FBSDKAppEvents.setUserID(NSUUID().uuidString)

    var token: String = ""
    for i in 0 ..< deviceToken.count {
        token += String(format: "%02.2hhx", deviceToken[i] as CVarArg)
    }
    print("Token: \(token)")
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    if FBNotificationsManager.shared().canPresentPushCard(fromRemoteNotificationPayload: userInfo) {

        FBNotificationsManager.shared().presentPushCard(forRemoteNotificationPayload: userInfo, from: nil, completion: nil)

    } else {

        print("Unknown Payload")
    }

    completionHandler(.newData)
}

更新 2:经过数小时的试验和挖掘,我们在 Facebook 的支持页面上发现了这个错误报告,这似乎证实这不是一个孤立的问题:https ://developers.facebook.com/bugs/118059088679219/

4

0 回答 0