Unity环境集成指南

本文面向 Unity 3D 开发者,提供简单、快速的推送宝 SDK 集成指南

Unity Android 集成指南

导入 Unity Plugin

  1. 下载 Unity Plugin, 直接放到 Unity 工程 Assets 目录下(其中cs文件为实例文件,可根据情况进行删除)
  2. 修改pushconfig.properties(Assets/Plugins/Android/assets/pushconfig.properties) 文件的 PUSH\_APP\_ID 为您在推送宝网站申请应用的 App ID.
  3. 用 unity 导出 Android 工程。

修改配置文件:

  1. application标签下的name属性改为:

    android:name="com.tuisongbao.android.unity.UnityApplication"
    
  2. application标签下加入以下声明:

    <activity
      android:name="com.tuisongbao.android.richmedia.RichMediaActivity"
      android:configChanges="keyboardHidden|orientation|screenLayout|uiMode|screenSize"
      android:theme="@android:style/Theme.NoTitleBar" >
    </activity>
    
    <receiver
      android:name="com.tuisongbao.android.broadcast.PushBroadcastReceiver"
      android:exported="true">
      <intent-filter android:priority="0x7fffffff" >
          <action android:name="android.intent.action.BOOT_COMPLETED" />
          <action android:name="android.intent.action.USER_PRESENT" />
          <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
          <category android:name="{my_app_package}" />
      </intent-filter>
    
      <intent-filter android:priority="0x7fffffff" >
          <action android:name="android.intent.action.PACKAGE_REMOVED" />
          <action android:name="android.intent.action.PACKAGE_REPLACED" />
          <data android:scheme="package"/>
      </intent-filter>
    
      <intent-filter android:priority="0x7fffffff" >
          <action android:name="com.tuisongbao.push.android.intent.RECEIVE" />
          <action android:name="com.tuisongbao.push.android.intent.DEBUG_MESSAGE" /> <!-- optional -->
      </intent-filter>
    </receiver>
    
    <service
      android:name="com.tuisongbao.android.service.PushService"
      android:process=":tpush_v1"
      android:exported="true" >
      <intent-filter>
          <action android:name="com.tuisongbao.android.push.PushService" />
      </intent-filter>
    </service>
    
    <service android:name="com.tuisongbao.android.unity.UnityNotificationHandService">
    </service>
    
  3. manifest标签下加入以下的权限声明,并修改 sdk 要求的最低以及最高版本:

    <permission android:name="{my_app_package}.permission.PUSH"  android:protectionLevel="signature" />
    <uses-permission android:name="{my_app_package}.permission.PUSH" />
    
    <!-- TPS 推送需要网络连接 -->
    <uses-permission android:name="android.permission.INTERNET" />
    
    <!-- 接收到新的推送消息,需要唤醒应用程序的进程 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    
    <!-- 推送宝需要根据以下信息产生手机的唯一识别码 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    
    <!-- for log -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    <!-- 可选,若需要地理围栏推送时,务必记得加上 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
    <!--The targetSdkVersion is optional, but it's always a good practice
       to target higher versions.-->
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />
    
  4. 修改AndroidManifest.xml文件中的{my\_app\_package}为您应用程序的包名。

PushNotificationsAndroid.cs 文件详解

using UnityEngine;
using System.Collections;

public class PushNotificationsAndroid : MonoBehaviour {

  // 初始化推送宝 SDK
  void Start () {
    InitPushYun();

    Debug.Log(this.gameObject.name);
  }

  // Update is called once per frame
  void Update () {

  }

  private static AndroidJavaObject pushYun = null;

  void InitPushYun() {
    if(pushYun != null)
      return;

    using(var pluginClass = new AndroidJavaClass("com.tuisongbao.android.unity.PushYunProxy"))
      pushYun = pluginClass.CallStatic<AndroidJavaObject>("instance");

    pushYun.Call("setListenerName", this.gameObject.name);
    pushYun.Call("setNotificationRing", true);
    pushYun.Call("getLatestLocation");

    registerTag("TuiSongBao");
  }

  // 注册标签
  public void registerTag(string tag) {

    pushYun.Call("registerTag", tag);
  }

  // 注销标签
  public void unRegisterTag(string tag) {

    pushYun.Call("unRegisterTag", tag);
  }

  // 消息到达时的回调方法
  void onPushNotificationsReceived(string payload) {

    Debug.Log(payload);
  }

  // 获取设备唯一标识符
  void onPushRegistered(string token) {

    Debug.Log(token);
  }

  // 获取最近一次的位置信息的回调函数
  void onLocationReceived(string locationJsonString) {
    Debug.Log (locationJsonString);
  }

  // 设置定时通知
  public void setLocalNotification (string content, int seconds) {

    pushYun.Call("setLocalNotification", content, seconds);
  }

  void onLocalNotificationsReceived(string payload) {

    Debug.Log (payload);
  }

  void sendLocalNotificationFailure(string error) {

    Debug.Log (error);
  }
}

在 Unity 中获取 Notification

当推送宝收到通知时会调用方法onPushNotificationsReceived(),请在 Unity 程序中适时初始化PushNotificationsAndroid

接收到的数据格式如下:

{"body":"来自推送宝的消息。","com\_pushyun\_nid":"5585"}

在 Unity 中获取地理位置信息

推送宝初始化之后,在适当的位置调用pushYun.Call("getLatestLocation"), 当有地理位置信息时,推送宝会调用onLocationReceived()方法

接收到的数据格式如下:

  {
    "status": 0,
    "result":
      {
        "queryLocation": [31.2234, 121.59674],
        "addrList": // 该经纬度可能的位置列表
        [
          {
            "nearestPoint": [121.59345, 31.20988],
            "distance": 137.311,
            "name": "郭守敬路",
            "admName": "上海市,浦东新区"
            // 还有一些其他字段
          }
        ]
      }
  }

Unity iOS 集成指南

导入 Unity Plugin

  • 下载 Unity Plugin, 直接放到 Unity 工程 Assets 目录下
  • 修改 Plugin / iOS 目录下的 文件 PushNotificationManager.m:

        if(isPushOnStart)
        {
            [[PushManager sharedInstance] initPushManagerWithAppID:@"Your App ID" apiScrect:@"Your Api Secret" delegate:self];
            [[PushManager sharedInstance] startLocationSevice:YES];
    
            [[PushManager sharedInstance] didFinishLaunchingWithOptions:userInfo];
        }
    

导出 iOS 工程

注意:导出工程时要删除 Plugin 下的 PushNotificationsAndroid.cs 文件),添加 PushFramework

在 Unity 中获取 Notification

详见 Unity Plugin 中的 PushNotificationsIOS.cs 文件, 当系统收到通知时会调用方法 onPushNotificationsReceived, 请在 Unity 程序中适时初始化 PushNotificationsIOS.

接收到的数据格式如下:

{
    "apns" : { "alert" : "来自推送宝的消息。" },
    "com_pushyun_nid": 5590
}
  Back To Top