本文面向 Unity 3D 开发者,提供简单、快速的推送宝 SDK 集成指南
cs
文件为实例文件,可根据情况进行删除)pushconfig.properties
(Assets/Plugins/Android/assets/pushconfig.properties
)
文件的 PUSH\_APP\_ID
为您在推送宝网站申请应用的 App ID.将application
标签下的name
属性改为:
android:name="com.tuisongbao.android.unity.UnityApplication"
在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>
在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" />
修改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);
}
}
当推送宝收到通知时会调用方法onPushNotificationsReceived()
,请在 Unity 程序中适时初始化PushNotificationsAndroid
。
接收到的数据格式如下:
{"body":"来自推送宝的消息。","com\_pushyun\_nid":"5585"}
推送宝初始化之后,在适当的位置调用pushYun.Call("getLatestLocation")
, 当有地理位置信息时,推送宝会调用onLocationReceived()
方法
接收到的数据格式如下:
{
"status": 0,
"result":
{
"queryLocation": [31.2234, 121.59674],
"addrList": // 该经纬度可能的位置列表
[
{
"nearestPoint": [121.59345, 31.20988],
"distance": 137.311,
"name": "郭守敬路",
"admName": "上海市,浦东新区"
// 还有一些其他字段
}
]
}
}
修改 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];
}
注意:导出工程时要删除 Plugin 下的 PushNotificationsAndroid.cs 文件),添加 PushFramework
详见 Unity Plugin 中的 PushNotificationsIOS.cs 文件, 当系统收到通知时会调用方法 onPushNotificationsReceived, 请在 Unity 程序中适时初始化 PushNotificationsIOS.
接收到的数据格式如下:
{
"apns" : { "alert" : "来自推送宝的消息。" },
"com_pushyun_nid": 5590
}