同一应用程序的不同 APN 设备令牌 ID

Posted

技术标签:

【中文标题】同一应用程序的不同 APN 设备令牌 ID【英文标题】:Different APN Device Token ID for same application 【发布时间】:2015-09-01 12:53:48 【问题描述】:

我刚刚按照http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1 的教程创建了一个示例推送通知示例......

但我不知道哪里出错了我在不同设备上为同一应用程序接收到不同的令牌 ID

这是我的参考代码,

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

        var type = UIUserNotificationType.Badge | UIUserNotificationType.Alert | UIUserNotificationType.Sound;
        var setting = UIUserNotificationSettings(forTypes: type, categories: nil);
        UIApplication.sharedApplication().registerUserNotificationSettings(setting);
        UIApplication.sharedApplication().registerForRemoteNotifications();

        return true
    


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

        println("My token is \(deviceToken)")  // am getting it different for different devices
    

    //Called if unable to register for APNS.
    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) 

        println(error)

    

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 

        println("Recived: \(userInfo)")
        //Parsing userinfo:
        var temp : NSDictionary = userInfo
        if let info = userInfo["aps"] as? Dictionary<String, AnyObject>
        
            var alertMsg = info["alert"] as! String
            var alert: UIAlertView!
            alert = UIAlertView(title: "", message: alertMsg, delegate: nil, cancelButtonTitle: "OK")
            alert.show()
        
    

另一个问题是我收到了声音和横幅,但没有收到“徽章”

任何帮助将不胜感激......

【问题讨论】:

每台设备都会有所不同,这是意料之中的。 哦!然后,如果我有一台服务器,但我不知道有多少人从应用商店下载了我的应用......在这种情况下,我将如何向所有人发送通知?? 你必须在你的设计(服务器)中加入这个东西,你会将用户的设备 ID 发送到服务器并根据需要发送推送 你知道如何与服务器通信吗?根据本教程??如果是,你能解释一下吗? 【参考方案1】:

在您的“didRegisterForRemoteNotificationsWithDeviceToken”中 像这样将您的设备令牌发送到服务器

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) 
    let deviceTokenStr = HDDataLayer.convertDeviceTokenToStr(deviceToken)
    HDDataLayer.postNotificationServiceResponseByUrlString("pushnotifications/notifications/register", andParams: tempDict, andDictCompletion:  (response: AnyObject!, error: NSError!) -> Void in
        NSLog("Device Register successfully")
    )

请注意,HDDataLayer 是我自己的类,您将使用您正在使用的类与您的服务器进行交互。

【讨论】:

以上是关于同一应用程序的不同 APN 设备令牌 ID的主要内容,如果未能解决你的问题,请参考以下文章

为 APN 安全发送设备令牌

iOS APN 推送通知 - 设备令牌

GCM 多设备令牌

从 APN 迁移到 Firebase 后未重新生成 iOS 设备令牌

关于如何将 APN 的设备令牌链接到注册用户的建议(通过 phonegap 或 UIWebView)

通过 FCM 发送推送通知时何时使用 iOS 设备令牌?