本人从来都没有搞过Android开发,也是刚刚从事Unity开发没多久的小白,由于在此次工作项目中涉及到了信息推送的功能要求,所以就开始接触这一方面的东西了,没搞过确实感觉麻烦啊,过程中只要哪里出现一点问题就不能成功了。希望我的成功案例能够帮助到一些朋友,同时有不足之处也希望大神看到了指点一下,好了,废话不多说了,开始我们的推送之旅吧!
基础要求:
1.Unity和Eclipse的安卓开发配置环境;
2.极光推送的账号,没有就注册一个,https://www.jiguang.cn/push;
正式步骤:
1.在极光推送创建一个应用,
在极光推送->极光开发者服务->应用管理中点击《创建应用》,进入创建界面后,“应用名称”和“应用图标”按照自己的要求完成后,点击《创建我的应用》:
然后就会进入这个界面:
再点击下面的《推送设置》,进入这个界面:
到这里第一步就完成啦。
2.在eclipse中创建一个android项目,项目的包名就是在极光创建应用时取的名字com.my.JPushTest:
填写完这些信息后就没什么要特别设置了,一直下一步直到创建完毕,之后就是将需要的包和资源文件拖到项目中的libs文件下:
<1>.与Unity相关的Classes.jar,连接Unity时需要。找到Unity的安装目录,然后按照这个目录层次找到它,由于Unity版本不同可能所在的子集目录会不同,这里我给出两个目录:
<2>.接极光推送需要的包和文件。打开在极光网下载的文件,解压后找到libs文件,将如图被选中的几个文件拖到eclipse项目中的libs文件下
将这些文件拖过来之后这就是这样的了:
这里有4个.jar文件,三个是我们拖过来的,有一个是创建Android项目时自动生成的,现在我们要对这四个文件添加引用,很简单就是右键选中.jar文件,点击Build Path->点击Add to Build Path,4个.jar文件所以需要操作四次。
这些都弄完后就是正式添加代码了,由于我们只是尝试,不需要很复杂就能简单就简单了:
<1>.MainActivity.java文件中代码:
package 你的项目包名;
import 你的项目包名.R;
import com.unity3d.player.UnityPlayerActivity;
import cn.jpush.android.api.JPushInterface;
import android.os.Bundle;
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
}
}
<2>.程序好像必须要一个广播,用来发送和接收消息,没有广播就不能推送消息了,我们就来创建一个Class文件,取名为MyPushReceiver,完成后就变成MyPushReceiver.java文件,其中我们啥事也不干:
package 你的项目包名;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyPushReceiver extends BroadcastReceiver {
public MyPushReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
}
}
<3>.重头戏,AndroidManifest.xml中的代码:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ui.example.hellowworld"
android:versionCode="310"
android:versionName="3.1.0" >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
<permission
android:name="你的项目包名.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="你的项目包名.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<application
android:allowBackup="false"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="你的项目包名.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<receiver android:name="你的项目包名.MyPushReceiver" >
<intent-filter>
<action android:name="android.intent.action.MEDIA_UNMOUNTED" >
action>
<data android:scheme="file">data>
intent-filter>
receiver>
<service
android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" />
<action android:name="cn.jpush.android.intent.REPORT" />
<action android:name="cn.jpush.android.intent.PushService" />
<action android:name="cn.jpush.android.intent.PUSH_TIME" />
intent-filter>
service>
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="你的项目包名" />
intent-filter>
activity>
<receiver
android:name="你的项目包名.MyPushReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="你的项目包名" />
intent-filter>
receiver>
<provider
android:authorities="你的项目包名.DataProvider"
android:name="cn.jpush.android.service.DataProvider"
android:exported="false"
/>
<service
android:authorities="你的项目包名.DownloadProvider"
android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false" >
service>
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true"
android:exported="false">
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
<category android:name="你的项目包名"/>
intent-filter>
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
intent-filter>
receiver>
<receiver android:name="cn.jpush.android.service.AlarmReceiver" android:exported="false"/>
<receiver
android:name="你的项目包名.MyPushReceiver"
android:exported="false"
android:enabled="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<action android:name="cn.jpush.android.intent.CONNECTION" />
<category android:name="你的项目包名" />
intent-filter>
receiver>
<meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
<meta-data android:name="JPUSH_APPKEY" android:value="极光网创建项目时的App key"/>
application>
manifest>
代码都完成后就发一个jar包出来,这个包要用到Unity中去。右键项目,先Refresh F5刷新一下,再右键项目Build Project一下,
最后右键项目点击Export打包
然后弹出这个界面,如图选择点击下一步:
再弹出这个界面,由于我们只需要打包代码所以只勾选一个,打包出来的这个就是Unity中我们要用到的,这里我取名为PushTest.jar,打包后存放在了桌面:
3.最后一步了,就是创建一个Unity项目,项目中我们什么代码也不写,只需要将先前打出来的包和必要文件拖过来到相应的文件夹下就可以发App了。
<1>.在Assets文件夹下创建一个文件Plugins,在Plugins文件夹下创建Android文件夹,
<2>.将Eclipse项目中的res文件夹和AndroidManifest.xml文件拖到Android文件夹下,
<3>.再在Android文件夹下创建bin文件夹,将在Eclipse中打包出来的.Jar文件(我这里是PushTest.jar)拖进来。
<4>.在Android文件夹下再创建一个libs文件夹,将Eclipse项目中libs文件下,除了Classes.jar的文件都拖进来
完成后如下列图中所示:
最后就可以发安卓包了,发包要设置包名为先前我们设置的名称:
成功发包后安装在手机上,然后运行,最后就是去极光官网发送推送消息啦!