本人从来都没有搞过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中的代码:
<?xml version="1.0" encoding="utf-8"?>
<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" />
<!-- Required -->
<permission
android:name="你的项目包名.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<!-- Required 一些系统要求的权限,如访问网络等-->
<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" />
<!-- Optional for location -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
<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">
<!-- For test only 测试的主程序 -->
<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>
<!--广播也和activity一样需要注册 -->
<receiver android:name="你的项目包名.MyPushReceiver" >
<intent-filter>
<!-- action:这个是你要监听的广播,这个广播可以是系统发出来的,也可以是别的 -->
<!-- 应用程序发的,也可以是你自己在本程序中自定义的 -->
<!-- data 发送广播的那个程序有没有定义,如果定义了我们就要添加相对应的data,不然这个 -->
<!-- 广播就会监听失败 -->
<!-- sd卡被卸载的广播,这个广播要加data不然监听不到 -->
<action android:name="android.intent.action.MEDIA_UNMOUNTED" >
</action>
<data android:scheme="file"></data>
</intent-filter>
</receiver>
<!-- Required SDK 核心功能-->
<!-- option since 2.0.5 可配置PushService,DaemonService,PushReceiver,AlarmReceiver的android:process参数 将JPush相关组件设置为一个独立进程 -->
<!-- 如:android:process=":remote" -->
<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>
<!-- Required SDK核心功能-->
<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>
<!-- Required since 3.0.7 -->
<!-- 新的tag/alias接口结果返回需要开发者配置一个自定的广播 -->
<!-- 该广播需要继承JPush提供的JPushMessageReceiver类, 并如下新增一个 Intent-Filter -->
<receiver
android:name="你的项目包名.MyPushReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="你的项目包名" />
</intent-filter>
</receiver>
<!-- since 3.0.9 Required SDK 核心功能-->
<provider
android:authorities="你的项目包名.DataProvider"
android:name="cn.jpush.android.service.DataProvider"
android:exported="false"
/>
<!-- Required SDK核心功能-->
<service
android:authorities="你的项目包名.DownloadProvider"
android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false" >
</service>
<!-- Required -->
<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" /> <!--Required 显示通知栏 -->
<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>
<!-- Optional -->
<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>
<!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.AlarmReceiver" android:exported="false"/>
<!-- User defined. 用户自定义的广播接收器-->
<receiver
android:name="你的项目包名.MyPushReceiver"
android:exported="false"
android:enabled="true">
<intent-filter>
<!--Required 用户注册SDK的intent-->
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<!--Required 用户接收SDK消息的intent-->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<!--Required 用户接收SDK通知栏信息的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<!--Required 用户打开自定义通知栏的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<!-- 接收网络变化 连接/断开 since 1.6.3 -->
<action android:name="cn.jpush.android.intent.CONNECTION" />
<category android:name="你的项目包名" />
</intent-filter>
</receiver>
<!-- Required. For publish channel feature -->
<!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。-->
<!-- 例如: -->
<!-- 发到 Google Play 的APK可以设置为 google-play; -->
<!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
<!-- 目前这个渠道统计功能的报表还未开放。-->
<meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
<!-- Required. AppKey copied from Portal -->
<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的文件都拖进来
完成后如下列图中所示:
最后就可以发安卓包了,发包要设置包名为先前我们设置的名称:
成功发包后安装在手机上,然后运行,最后就是去极光官网发送推送消息啦!