2

我有一个应用程序目前在beta测试,具有消息功能。它被设置为当用户从另一个用户收到新消息时发送推送通知。只有时间推送通知的工作方式是当用户专门向我发送消息时。如果我尝试向任何其他用户发送消息或任何用户互相发送不包含我的消息,则推送通知不起作用。 只有发送给我的消息会在我的设备上触发推送通知。推送通知不从我的设备发送 - 解析

下面是Parse的一些简单屏幕截图,其中显示了正确发送的一个按键以及没有发送的一个按键。

这是命名为“阿利萨”我在我正确地接收到推送通知其他用户发送私人消息(你可以通过“推送发送” = 1见):

working push notification

这里是说推的细节:

working push notification details

现在,这里是一家私人消息发送我的设备,那收到了同样的装置正确推送通知,回到“Alissa”。正如你所看到的,“推送发送” = 0,意思是我的设备发送的消息,但收件人没有收到推送通知:

not working push notification

这里是推的细节,包含几乎相同信息工作一个发给我:

not working push notification details

最后,这里是另一个推不工作“阿利萨”那不是我,所以用户从我的设备放在其他用户之间发送。

enter image description here enter image description here

这是一种模式,当我看到所有推的列表,从用户在我的应用程序。除了推送发送到我的设备时,它们都“推送”= 0,“推送发送= 1”。

我已经打印到我的推送通知方法完成处理程序中的控制台,并且它们表明当我向其他用户发送消息时,推送已成功发送。我还会指出,我的设备正在用于此应用程序的开发。

另外作为一个方面说明,它并不总是这样。几个星期前,一切正常。我发布了多个新版本,从未遇到过问题。

任何人都可以指引我在正确的方向吗?

编辑:下面我已经包含更多详细信息,包括我的应用程序中的代码和 我的开发者帐户和解析后端的详细信息。在我的应用程序

以下

相关代码代码,我在我的AppDelegate所建议的解析,包括设立推送通知。值得注意的是,println语句“确实注册了用户通知设置”和“注册设备令牌的远程通知”都在应用程序启动时被正确记录。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // ... 
    let userNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge 
    let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil) 
    application.registerUserNotificationSettings(settings) 
    application.registerForRemoteNotifications() 
    // ... 
} 

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { 
    println("did register user notification settings") 
} 

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
    PFInstallation.currentInstallation().setDeviceTokenFromData(deviceToken) 
    PFInstallation.currentInstallation().saveInBackground() 
    println("did register for remote notifications with device token") 
} 

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 
    println("didFailToRegisterForRemoteNotificationsWithError: ", error.localizedDescription) 
} 

这是我将邮件发送给其他用户时所包含的代码。 println陈述“成功”记录正确也是不值得的。从我的开发人员帐户

这里

PFInstallation.query().whereKey("user", equalTo: incomingUser) 

    PFPush().setQuery(pushQuery) 
    let senderName = PFUser.currentUser()!.objectForKey("name") as! String 
    let data = [ 
     "alert" : "New message from \(senderName)", 
     "badge" : "Increment" 
    ] 
    push.setData(data) 
    push.sendPushInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in 
     if success { 
      println("success") 
     } else { 
      println(error?.localizedDescription) 
     } 
    } 

相关的细节是表示我的开发人员门户我的应用程序ID的屏幕截图。这似乎表明,推送通知能正常(我删除并重新添加的所有证书与新的供应配置文件)

Push notifications enabled in developer portal

相关细节从我解析账号

这里是我的推Parse中的通知设置。当我重新创建证书时,所有这些信息都已更新。

Parse push notification settings

虽然我不知道这可能提供洞察的一些水平。这是Parse中PFInstallations表的截图。任何时候有人登录/打开应用程序都会创建安装。我只是在我的设备上运行应用程序,而我在桌面上的记录是最好的。与其余部分不同的是,“deviceToken”列中的值仅适用于我的设备。当我删除我的PFInstallation记录并重新启动应用程序重新创建它时,总是会在“deviceToken”下创建一个值。

enter image description here

在Xcode

相关细节下面是代码在我的Xcode构建设置签署的扩展视图。此代码签名在项目和目标代码签名中都是相同的。

enter image description here enter image description here

再次,推送通知正在为所有用户短信的其他用户,只有当从我的设备发送给其他用户的消息不工作。

+0

亚伦,你可以发布你的推送通知代码,iOS和任何你可能使用的云代码?也许我们可以从那里更好地诊断。 –

+0

@RyanKreager我编辑了我原来的帖子,在上面包含了更多的细节。 – Aaron

+0

@RyanKreager此外,我目前没有使用任何云代码。 – Aaron

回答

1

从什么使你的设备独特开始,它的状态是一个开发环境设备是可能的罪魁祸首。

一个很好的检查位置是您的设备的构建和随后使用的推送证书。如果您的设备处于开发模式(意味着您正在通过Xcode构建并部署到您的手机中),那么它将使用推送证书代替生产进行开发。(有关此差异的更多信息,请参阅this great article by Ray Wenderlich

此处的关键因素是只有您的设备将使用此不同的证书。如果它被吊销/损坏/未安装,则只有您的设备会遇到此问题。

您也可以通过将应用程序通过TestFlight/HockeyApp /等部署到您的手机来测试此功能,而不是让Xcode加载它。

UPDATE:

刚刚浇过的代码,检查错误。有一件事已经注意到了:你的didFinishLaunchingWithOptions包括一个额外的PFInstallation.currentInstallation().saveInBackground() - 你应该删除它,只有在didRegisterForRemoteNotificationsWithDeviceToken方法。

这就是为什么只有你的设备在它的PFInstallation中有一个ID,可能是你的设备无法联系其他任何人的原因 - 推送系统正在工作,但它没有地址从那里呼叫;这将是一次沉默的失败,而不是解析系统。

您是否尝试过让用户互相推送,或只向您和您发送推送?

+0

这是有道理的。奇怪的是我在我的开发设备上使用了Testflight,并且我已经删除了我的Xcode构建,并通过Testflight安装了应用程序,但它仍然无法正常工作。除非在开发设备上通过Testflight进行安装,否则无论TestFlight如何,它都会受到开发推送证书的影响。 – Aaron

+0

我会尝试硬币的另一面然后:撤销,重新创建您的开发推送证书并重新上传到Parse,看看是否有帮助。 –

+0

Blah,在重新配置配置文件和所有证书后仍然不工作。明天我会收到这个问题。 – Aaron

相关问题