1:注册
官网注册账户,创建应用
2:demo体验
应用设置–>推送设置中,设置好应用包名后,即可下载体验包
3:官方教程
官方提供的是泛安卓平台下的集成方法Android SDK集成指南,笔者使用文中提到的手动集成方法。
3.1 SDK下载
3.2 必要资源复制
- 解压缩安卓版SDK包:jpush-android-3.x.x-release.zip
- 复制libs/jcore-android-2.3.0.jar到Unity工程的Plugins/Android/libs目录下
- 复制libs/jpush-android-3.5.8.jar到Unity工程的Plugins/Android/libs目录下
- 复制libs/armeabi-v7a目录和libs/arm64-v8a目录到Unity工程Plugins/Android/libs目录下,其余小众版本不需要再考虑了
- 再复制res目录到Plugins/Android目录下,即和libs同级目录
注意 默认情况下推送图标和工程的图标一致,在 5.0 以上系统将应用图标作为 statusbar icon 可能显示不正常,用户可以在res/drawable-hdpi下新增jpush_notification_icon.png图标即可显示正常。特别注意,笔者亲测 图标背景 不能用纯色,需要用透明背景,把icon轮廓显示出来。如果背景是纯色,那么显示出来的是白色方块
3.3 初始化
在android studio中写了个继承自UnityPlayerActivity的MainActivity.java,并设置脚本所在包名和项目一致,在该脚本中对JPUSH初始化
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("unityPlugin","-------->初始化JPUSH");
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
}
}
注意,对于发布版本,尽量设置setDebugMode(false)
3.4 配置AndroidManifest.xml和必要代码
3.4.1 启动Activity需要改成上述提到的MainActivity
<activity android:label="@string/app_name"
android:name=".MainActivity"
android:screenOrientation="sensorLandscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这里有一点需要注意,即.MainActivity写法的问题,在某些版本unity上打包后会出现java.lang.ClassNotFoundException Did not find class com.unity3d.player.MainActivity的问题,解决方法见这里
3.4.2 根据SDK压缩包中的AndroidManifest.xml样例文件以及示例代码来配置
- 复制备注为“Required”的部分(权限、以及后续JPUSH配置)
- 将标注为 ${applicationId}的改成包名,将标注为 ${JPUSH_CHANNEL}的改成自己可识别的渠道字符串,将标注为
${JPUSH_APPKEY}的改成后台创建应用时生成的APPKEY - 3个标注为User defined的,需要配置在xml中,且需要在插件端实现,不然出的包会报错并给出对应的提示(笔者是在和项目同名的包下创建对应的java脚本,然后分别拷贝压缩包中com.example.jpushdemo.MyReceiver, com.example.jpushdemo.PushMessageReceiver, com.example.jpushdemo.PushService三个脚本的代码,把不需要的代码<比如打开其他activity等>注释)
4 github版本
github上有专门的针对Unity3D的激光推送package,版本稍微有点落后,有兴趣的可以试一下:jpush-unity3d-plugin
3.5 收到推送消息,点击消息后拉起Unity应用
public class MyJPUSHMessageReceiver extends JPushMessageReceiver {
private static final String TAG = "JPushMessageReceiver";
@Override
public void onMessage(Context context, CustomMessage customMessage) {
Log.e(TAG,"[onMessage] "+customMessage);
processCustomMessage(context,customMessage);
}
@Override
public void onNotifyMessageOpened(Context context, NotificationMessage message) {
Log.e(TAG,"[onNotifyMessageOpened] "+message);
//拉起unity应用
Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
AndroidManifest需配置
<receiver android:name="com.freecasino.vegas.slots.master.game.MyJPUSHMessageReceiver">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="包名"></category>
</intent-filter>
</receiver>
主activity需要设置:android:launchMode="singleTask"
5 异常分析
笔者有遇到项目的推送图标还是极光的图标,导致原因是先打开了极光的demo工程,由于demo工程配置了和项目工程一致的包名,虽然demo工程已卸载,且新安装了项目工程,但是缓存未清理导致了项目推送图标出现问题。重启手机即可解决。