2

Currently have issue with GCM Push Notification for IOS.

I have tried different tutorials but still not be able to pass through MismatchSenderid.

Code I use displays below output -

$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 Code -

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,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1452846200241751%bcdb604df9fd7ecd"}]}

Cœur
  • 37,241
  • 25
  • 195
  • 267
Aslan Kaya
  • 514
  • 5
  • 11

1 Answers1

1

Based on the Downstream error response codes section of the GCM

A registration token is tied to a certain group of senders. When a client app registers for GCM, it must specify which senders are allowed to send messages. You should use one of those sender IDs when sending messages to the client app. If you switch to a different sender, the existing registration tokens won't work.

adjuremods
  • 2,938
  • 2
  • 12
  • 17