Android集成极光推送Jpush小记


先介绍下极光推送吧,想要实现推送功能,现在市场上主要的实现方式是维持一个长连接,服务端随时发出一条通知或者一条自定义消息时,用户可以实时的接受到该消息并进行相应处理。

极光推送(JPush)也不例外,就是这样一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率。极光推送客户端支持 Android, iOS 两个平台。

本 Android SDK 方便开发者基于 JPush 来快捷地为 Android App 增加推送功能。

Android应用集成Jpush流程:

第一步肯定是注册一个极光推送的账号,之后添加应用,需要填写包名等相关信息,添加之后如图:

极光推送应用详情页面会展示应用的具体信息,其中包名是我们注册应用时填写的,而我们主要用到的就是AppKey这个属性,稍候我会提到。

完成了应用的注册,接下来就是集成流程:

SDK集成步骤

导入 SDK 开发包到你自己的应用程序项目

  • 解压缩 jpush-sdk_v1.x.y.zip 集成压缩包
  • 复制 libs/jpush-sdk-release1.x.y.jar 到工程 libs/ 目录下
  • 复制 libs/armeabi/libjpush1xy.so 到工程 libs/armeabi 目录下
  • 复制 libs/armeabi-v7a/libjpush.so 到工程 libs/armeabi-v7a 目录下

如果您的项目有 libs/armeabi-v7a 这个目录,请把 libs/armeabi-v7a下的so文件 也复制一份到这个目录。

  • 复制 res/drawable-hdpi 中的资源文件到工程的 res/drawable-hdpi/ 目录下
  • 复制 res/layout 中的布局文件到工程的 res/layout/ 目录下

说明 1:若没有drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbar icon可能显示不正常,用户可定义纯色icon替换这个文件,文件名不要变。

说明 2:如果要在gradle中配置 shrinkResources true 用来清理多余资源,请在res/raw/ 中添加一个keep.xml来描述保留JPushSDK中的必要资源。示例请参考版本包中的 res/raw/keep.xml文件。(2.1.5版本以上)

 ps:这几行是从Jpush文档上抄的,写的很仔细,照着做就好

配置 AndroidManifest.xml

<permission
    android:name="com.dxf.org.webview.permission.JPUSH_MESSAGE"
    android:protectionLevel="signature" />
这行权限是为了给应用添加接受自定义消息,如果有接受自定义消息的需求的话,一定要添加
<uses-permission android:name="com.dxf.org.webview.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.WRITE_SETTINGS" />
<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.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
上述这些权限是为应用添加Jpush所需的权限,都添加上即可
接下来这些是很重要的,属于JpushSDK中的主体部分,因为Jpush的实现方式就是注册一个广播来接受长连接中返回的数据,下面是广播的生命和部分配置
<!-- Required SDK核心功能 -->
<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="org.yuwei.education"/>
    </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"/>
然后是添加AppKey,下面列出的是我的JpushDemo的Appkey,替换成对应的即可,这也是不可缺少的部分
<meta-data
    android:name="JPUSH_APPKEY"
    android:value="3803be4c4fc5641e851f80c2"/>
至此,应用的清单文件就配置完成了,接下来是应用中的配置了
首先要在应用的Application文件中对Jpush进行初始化
JPushInterface.setDebugMode(true);  // 设置开启日志,发布时请关闭日志
JPushInterface.init(this);            // 初始化 JPush
添加Jpush中的Receiver类,在该类中的onReceive()方法中处理对应的消息,处理注释已经添加了
@Override
   public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
      Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
      
        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
            String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
            Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
            //send the Registration Id to your server...
                        
        } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
           Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
           processCustomMessage(context, bundle);
        
        } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");
            int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
           
        } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 用户点击打开了通知");
            
           //打开自定义的Activity
           Intent i = new Intent(context, TestActivity.class);
           i.putExtras(bundle);
           //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
           context.startActivity(i);
           
        } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
            //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..
           
        } else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
           boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
           Log.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected);
        } else {
           Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
        }
   }

 



 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM