Google Cloud Messaging для iOS MismatchSenderId

В настоящее время есть проблема с push-уведомлением GCM для IOS.

Я пробовал разные учебники, но до сих пор не могу пройти через MismatchSenderid.

Код, который я использую, отображается ниже вывода -

$msg = array
    (
            'to'       => $registatoin_ids,
            'notification'         => array('subtitle'      => 'Alert message!',
            'badge'       => 1,
            'sound'         => 'default',
            "title" =>  "Notification",
            'body'     => $message)
    );

[registration_ids] => Array
    (
        [0] => ldvBkaxZ0y4:APA91bGP7SWNFZg_BQIum0zKLKyQ6cDZmYi7pQvA5P9ZEjTiI8qiSU7hgX3qL5WnqzDEPTqCfQnqlKAXZ0-0pZkmr6omZO3eI1aAis_R1EaZPdMdtxx_28pkplmuPY2vX1oErkbCuZVB
    )

[data] => Array
    (
        [to] => Array
            (
                [0] => ldvBkaxZ0y4:APA91bGP7SWNFZg_BQIum0zKLKyQ6cDZmYi7pQvA5P9ZEjTiI8qiSU7hgX3qL5WnqzDEPTqCfQnqlKAXZ0-0pZkmr6omZO3eI1aAis_R1EaZPdMdtxx_28pkplmuPY2vX1oErkbCuZVB
            )

        [notification] => Array
            (
                [subtitle] => Alert message!
                [badge] => 1
                [sound] => default
                [title] => Notification
                [body] => Buy One Pizza Today and Get One Free
            )
    ))

Код iOS –

import UIKit


@UIApplicationMain

class AppDelegate: UIResponder,UIApplicationDelegate,AsyncDataProviderDelegate,GGLInstanceIDDelegate {

    var window: UIWindow?

    var successToken = ""

    var launchOpt : NSDictionary?

    var rootControllerVC : UIViewController?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.whiteColor()], forState:.Normal)

        UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor(red: 10.00/255.00, green: 32.00/255.00, blue: 32.00/255.00, alpha: 1)], forState:.Selected)


        let tabFont = UIFont(name:"Helvetica-Bold", size: 12)

        UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: tabFont!], forState:.Normal)


        if #available(iOS 8.0, *)
        {
            let types:UIUserNotificationType = ([.Alert, .Sound, .Badge])

            let settings:UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil)

            application.registerUserNotificationSettings(settings)

            application.registerForRemoteNotifications()
        } else
        {
            application.registerForRemoteNotificationTypes([.Alert, .Sound, .Badge])
        }

        UIApplication.sharedApplication().applicationIconBadgeNumber = 0

        NetworkManager.sharedInstance.delegate = self

        // Override point for customization after application launch.

        return true
    }

    func callRegisterAPi(regId : String)
    {
        let detailDict = NSMutableDictionary()

        detailDict.setObject(kDeviceType, forKey:deviceType)

        detailDict.setObject(kDeviceId, forKey:deviceId)

        detailDict.setObject(regId, forKey: registerID)

        detailDict.setObject(kguiVersion, forKey:guiVersion)

        NetworkManager.sharedInstance.registerDeviceApi("POST", isAsynchronous: true, userDictionary: detailDict)
    }


    //MARK:- AsyncData Provider delegate


    func dataGivenBack(resultDataDict: NSMutableDictionary, methodName: String) {
        if successToken != ""
        {
            NSUserDefaults.standardUserDefaults().setObject(successToken, forKey:kToken)
        }
    }


    //MARK:- Push Notification Delegate Methods


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

    {
        let characterSet: NSCharacterSet = NSCharacterSet( charactersInString: "<>" )

        let deviceTokenString: String = ( deviceToken.description as NSString ).stringByTrimmingCharactersInSet( characterSet ).stringByReplacingOccurrencesOfString( " ",withString: "" ) as String

        print("token is \(deviceTokenString)")

        // Create a config and set a delegate that implements the GGLInstaceIDDelegate protocol.

        let instanceIDConfig = GGLInstanceIDConfig.defaultConfig()

        instanceIDConfig.delegate = self

        // Start the GGLInstanceID shared instance with that config and request a registration

        // token to enable reception of notifications

        GGLInstanceID.sharedInstance().startWithConfig(instanceIDConfig)

        let registrationOptions = [kGGLInstanceIDRegisterAPNSOption:deviceToken,

            kGGLInstanceIDAPNSServerTypeSandboxOption:true]

        let gcmSenderID = "83985659474"

        GGLInstanceID.sharedInstance().tokenWithAuthorizedEntity(gcmSenderID,

            scope: kGGLInstanceIDScopeGCM, options: registrationOptions, handler: registrationHandler)
    }

    func registrationHandler(registrationToken: String!, error: NSError!) {
        if (registrationToken != nil) {
            successToken = registrationToken

            print("GCM Token is :\(registrationToken)")

            if isDeviceTokenChanged(registrationToken)
            {
                callRegisterAPi(registrationToken)
            }

            print("Registred")
        } else {
            print("Registration to GCM failed with error: \(error.localizedDescription)")
        }
    }

    func onTokenRefresh() {
        let registrationOptions = [kGGLInstanceIDRegisterAPNSOption:successToken,

            kGGLInstanceIDAPNSServerTypeSandboxOption:true]

        let gcmSenderID = "83985659474"

        // A rotation of the registration tokens is happening, so the app needs to request a new token.

        print("The GCM registration token needs to be changed.")

        GGLInstanceID.sharedInstance().tokenWithAuthorizedEntity(gcmSenderID,

            scope: kGGLInstanceIDScopeGCM, options: registrationOptions as [NSObject : AnyObject], handler: registrationHandler)
    }

    // Called if unable to register for APNS.

    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError)

    {
        print("not registered to APNS,\(error)")
    }

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)

    {
        GCMService.sharedInstance().appDidReceiveMessage(userInfo);

        print("Receiving dict is :\(userInfo)")

        rootControllerVC  = mainStoryBoard.instantiateViewControllerWithIdentifier("startingPage") as UIViewController

        self.window?.rootViewController = rootControllerVC

        UIApplication.sharedApplication().applicationIconBadgeNumber = 0


        completionHandler(UIBackgroundFetchResult.NewData)
    }

    func applicationDidBecomeActive(application: UIApplication) {

        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.


        GCMService.sharedInstance().connectWithHandler({

            (NSError error) -> Void in

            if error != nil {
                print("Could not connect to GCM: \(error.localizedDescription)")

            } else
            {
                //                self.connectedToGCM = true

                print("Connected to GCM")

                // ...
            }
        })
    }
}

{"multicast_id":8936417917512172262,"успех":1,"сбой":0,"canonical_ids":0,"результаты":[{"message_id":"0:1452846200241751%bcdb604df9fd7ecd"}]}


person Aslan Kaya    schedule 14.01.2016    source источник
comment
Проверьте ответ на stackoverflow.com/q/11313342/517134, похоже, проблема такая же или похожая.   -  person Yusuf K.    schedule 15.01.2016
comment
@YusufKARTAL Спасибо за ваш ответ. Но я не получаю ошибку MismatchSenderId. я получаю успех   -  person Anirban    schedule 15.01.2016
comment
Проверьте эту ссылку @YusufKARTAL - main.xfiddle.com/c029e74f/gcmios.php   -  person Anirban    schedule 15.01.2016
comment
@bumba, вроде работает, в чем проблема?   -  person Yusuf K.    schedule 15.01.2016
comment
Но я ничего не получаю на устройстве iOS.   -  person Anirban    schedule 15.01.2016
comment
@YusufKARTAL также добавил код iOS   -  person Anirban    schedule 15.01.2016
comment
@bumba Хорошо, твоя проблема в другом; пожалуйста, проверьте ответ stackoverflow.com/q/34704736/517134 Надеюсь, это поможет   -  person Yusuf K.    schedule 15.01.2016
comment
@YusufKARTAL Ты спас мой день. Да, мне просто нужно добавить «приоритет» => «высокий»   -  person Anirban    schedule 15.01.2016
comment
@бумба не за что   -  person Yusuf K.    schedule 15.01.2016


Ответы (1)


На основе раздела Коды ответа на нисходящие ошибки GCM.

Регистрационный токен привязывается к определенной группе отправителей. Когда клиентское приложение регистрируется в GCM, оно должно указать, каким отправителям разрешено отправлять сообщения. Вы должны использовать один из этих идентификаторов отправителя при отправке сообщений в клиентское приложение. Если вы переключитесь на другого отправителя, существующие токены регистрации не будут работать.

person adjuremods    schedule 15.01.2016