Parse.com - iOS push notifications and Unity integration

I noticed that Parse Unity support still doesn't provide push notifications for iOS.

Has anyone implemented a Unity plugin or other solution to support iOS Push notifications via Parse?

(Crossroads hosted on Unity Answers .)

+3


source to share


2 answers


It is now possible using ParseObject to layout the ParseInstallation object.

Here: https://gist.github.com/gfosco/a3d092651c32ba3385e6

Explanation in Google Parse group: https://groups.google.com/d/msg/parse-developers/ku8-r91_o6s/6ioQ9T2TP7wJ



Attach this script to GameObject, replace important parts with yours:

using UnityEngine;
using System.Collections;
using Parse;

public class PushBehaviorScript : MonoBehaviour {

    bool tokenSent = false;
    public ParseObject currentInstallation = null;

    void Start () {
        if (PlayerPrefs.HasKey ("currentInstallation")) {
            string objId = PlayerPrefs.GetString ("currentInstallation");
            currentInstallation = ParseObject.CreateWithoutData ("_Installation", objId);
        }

        if (currentInstallation == null) {
            #if UNITY_IPHONE && !UNITY_EDITOR
                NotificationServices.RegisterForRemoteNotificationTypes (RemoteNotificationType.Alert | RemoteNotificationType.Badge | RemoteNotificationType.Sound);
            #endif
        }
    }

    void  FixedUpdate () {
        if (!tokenSent && currentInstallation == null) {
            #if UNITY_IPHONE && !UNITY_EDITOR
                byte[] token   = NotificationServices.deviceToken;
                if(token != null) {
                    tokenSent = true;
                    string tokenString =  System.BitConverter.ToString(token).Replace("-", "").ToLower();
                    Debug.Log ("OnTokenReived");
                    Debug.Log (tokenString);
                    ParseObject obj = new ParseObject("_Installation");
                    obj["deviceToken"] = tokenString;
                    obj["appIdentifier"] = "com.parse.unitypush";
                    obj["deviceType"] = "ios";
                    obj["timeZone"] = "UTC";
                    obj["appName"] = "UnityPushTest";
                    obj["appVersion"] = "1.0.0";
                    obj["parseVersion"] = "1.3.0";
                    obj.SaveAsync().ContinueWith(t =>
                    {
                        if (obj.ObjectId != null) {
                            PlayerPrefs.SetString ("currentInstallation", obj.ObjectId);
                        }
                    });
                }
            #endif
        }
    }
}

      

+3


source


To implement iOS push with parse.com, you need to get the token from Apple first. Then save your current installation Unity now has this functionality built in.

//push notification
bool tokenSent = false;


void RegisterForPush()
{
    Debug.Log("Register for push");
    tokenSent = false;

    #if UNITY_IOS
    UnityEngine.iOS.NotificationServices.RegisterForNotifications(NotificationType.Alert |
                                                            NotificationType.Badge |
                                                            NotificationType.Sound, true);

    #endif

}


void Update () {

        if (!tokenSent) {
            byte[] token = UnityEngine.iOS.NotificationServices.deviceToken;

            if (token != null) {
                // send token to a provider
                tokenSent = true;
                string hexToken = "%" + System.BitConverter.ToString(token).Replace('-', '%');

                #if UNITY_IOS
                    ParseManager.instance.RegisterForPush(hexToken);
                #endif

            }
        }
}

      

And inside the ParseManager (or whatever class you use to manage parsing) the client communication)



public void RegisterForPush(string token) {

    Debug.Log("Parse updating instalation");

    ParseInstallation instalation = ParseInstallation.CurrentInstallation;
    instalation["deviceToken"] = token;
    instalation["user"] = ParseUser.CurrentUser.ObjectId;
    instalation["timeZoneOffset"] = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);
    instalation.SaveAsync();

}

      

Tested on Unity 5.1.2 and iOS 8.4

0


source







All Articles