Android极光推送继承配置

时间:2024-03-31 08:32:00

废话不多说,直接上代码:

1、现在配置文件AndroidManifest中的<manifest><manifest/>标签的最开始复制这些

  

<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 用于读取手机当前的状态 -->
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<permission
    android:name="com.health.huainan.healthhandbook.permission.JPUSH_MESSAGE"
    android:protectionLevel="signature"
/>

<uses-permission android:name="com.health.huainan.healthhandbook.permission.JPUSH_MESSAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>

上面这些都是假权限的,,加载哪里小伙伴们应该都知道吧?也给大家截个图:

Android极光推送继承配置

2、紧接着上面写完后,下面就是<application><application/>这个标签了,下面的要放在application标签中,先看图,需要一个初始化的类,做android的,这个都懂吧?

Android极光推送继承配置


 

3、按照上面的在上面标签里面把初始化的类加上,然后集成详细的极光配置文件一定写在application标签里面,(我曾经把极光的这部分最重要的配置放在了标签外面,运行时一直收不到消息,找了好久发现这个问题)

 

详细配置如下:

<!-- 集成极光 -->
<!-- Required SDK核心功能  直接拷贝 -->
<activity
    android:name="cn.jpush.android.ui.PushActivity"
    android:configChanges="orientation|keyboardHidden"
    android:exported="false"
>
    <intent-filter>
        <action android:name="cn.jpush.android.ui.PushActivity"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="com.health.huainan.healthhandbook"/>
    </intent-filter>
</activity>
<!-- Required  SDK核心功能   直接拷贝 -->
<service
    android:name="cn.jpush.android.service.DownloadService"
    android:enabled="true"
    android:exported="false"
/>

<!-- Required SDK 核心功能  直接拷贝 -->
<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>


<!-- 可不拷贝  since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service
    android:name="cn.jpush.android.service.DaemonService"
    android:enabled="true"
    android:exported="true"
>
    <intent-filter>
        <action android:name="cn.jpush.android.intent.DaemonService"/>

        <category android:name="com.health.huainan.healthhandbook"/>
    </intent-filter>

</service>

<!-- since 3.1.0 Required SDK 核心功能-->
<provider
    android:authorities="com.health.gw.healthhandbook.DownloadProvider"
    android:name="cn.jpush.android.service.DownloadProvider"
    android:exported="true"
    />
<!-- since 3.0.9 Required SDK 核心功能-->
<provider
    android:authorities="com.health.gw.healthhandbook.DataProvider"
    android:name="cn.jpush.android.service.DataProvider"
    android:exported="false"
    />


<!-- 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  显示通知栏 -->
        
<categoryandroid:name="com.health.huainan.healthhandbook"/>
    </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"/>
<receiver
    android:name="com.health.gw.healthhandbook.receiver.MyJpushReceiver"
    android:enabled="true"
    android:exported="false"
>
    <intent-filter>
        <action android:name="cn.jpush.android.intent.REGISTRATION"/>
        <!-- Required  用户注册SDK的intent -->
        
<actionandroid:name="cn.jpush.android.intent.UNREGISTRATION"/>
        <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED"/>
        <!-- Required  用户接收SDK消息的intent -->
        
<actionandroid:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED"/>
        <!-- Required  用户接收SDK通知栏信息的intent -->
        
<actionandroid:name="cn.jpush.android.intent.NOTIFICATION_OPENED"/>
        <!-- Required  用户打开自定义通知栏的intent -->
        
<actionandroid:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK"/>
        <!-- Optional 用户接受Rich Push Javascript 回调函数的intent -->
        
<actionandroid:name="cn.jpush.android.intent.CONNECTION"/>
        <!-- 接收网络变化 连接/断开 since 1.6.3 -->
        
<categoryandroid:name="com.health.huainan.healthhandbook"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
        <action android:name="android.net.wifi.STATE_CHANGE"/>
    </intent-filter>
</receiver>

<!-- Required  . Enable it you can get statistics data with channel  要求填写appKey再拷贝 -->
<meta-data
    android:name="JPUSH_CHANNEL"
    android:value="developer-default"
/>
<meta-data
    android:name="JPUSH_APPKEY"
    android:value="这里是你的APPkey"
/>
<!-- </>值来自开发者平台取得的AppKey -->

4、上面的位置不要放错了,再给大家接一个图,看一下,上面的复制完,下面就是这样啦!应该是application标签的结束位置了!:

Android极光推送继承配置

4)注意,复制上面时候,注意配置文件中的这部分有一个value值是自己在极光官网注册的软件app 的APPKEY值,而且是唯一的。

Android极光推送继承配置

5)注意下面,配置文件有几处这位置是写自己的应用包名的,

应用包名在你的build.gradle(Module:app)中查看
applicationId:看图明了:


6)上图中说的为什么那么写呢?在这里,想必你在官网已经下载了相关文件了吧?找到这个文件夹,直接赋值到这里,下面标注的这个文件夹里面

应该有好几个文件夹,文件夹里面还有文件,不要动,直接赋值到这里,注意赋值的位置,和资源文件夹(res)同级,看图说话:

Android极光推送继承配置


注意拷贝复制不要放错位置,直接在app文件下,这个文件夹下是这两个文件Android极光推送继承配置

*注意,有的新版的下载下来可能还有几个文件夹,没关系,一起复制进来,大家看到这两个文件夹的名字是不是想起来什么了啊?前面在build.gradle中ndk中的配置

对,就是这两个名字,有其他的文件名,也一起加上也行!

7)

6)还需要导入极光包,这个你下载的应该有吧?放在哪里一会再说,先把这个加上:

Android极光推送继承配置

上面我的版本是3.0.8的,你的就根据你的版本对应得加上,还有下面的那个,1.1.6的,我也不清楚,因为有这个包,也需要加上:下面我就把

这两个包的位置截图发出来:

Android极光推送继承配置

看到了吧?不过需要选择project模式才能看到这个lib包下面的这些东西,那两个包就放这里,

7)下面就开始加极光接收部分的代码了

小伙伴们注意喽:上面弄了半天,没有下面这个也白费,极光广播接收器的代码:需要自己创建一个接受类:一般都这么起名,不用改,

创建一个包名:receiver 新建一个类叫:MyJpushReceiver  下面是类里面的代码:

 

import android.app.AlertDialog; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.WindowManager; import com.health.gw.healthhandbook.LoginActivity; import com.health.gw.healthhandbook.WebViewActivity; import com.health.gw.healthhandbook.commui.ActivityCollector; import com.health.gw.healthhandbook.commui.FragmentTabAtivity; import org.json.JSONException; import org.json.JSONObject; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import cn.jpush.android.api.JPushInterface; /**  * 自定义接收器  * <p>  * 如果不定义这个 Receiver,则:  * 1) 默认用户会打开主界面  * 2) 接收不到自定义消息  */ public class MyJpushReceiver extends BroadcastReceiver {     private static String TAG = "MyJpushReceiver";     private NotificationManager nm;     private DateFormat formatter;     private Date dadte;     @Override     public void onReceive(Context context, Intent intent) {         if (null == nm){             nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);         }         formatter = new SimpleDateFormat("HH:mm:ss");         Bundle bundle = intent.getExtras();//获取intent里携带的数据集合         Log.e("极光推送:", "接收成功");         /**          * 一个技巧:把已知的动作写在前面,未知的动作写在后面,这样在用equals时可以避免空指针异常          */         if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())){             String registID = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);             Log.i("ID1",""+registID);//         }         //当用户点击了通知         if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {             Log.e("用户点击了通知,通知的标题为:", bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE));        //////             Intent intent1 = new Intent(context,FragmentTabAtivity.class);             intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);             intent1.putExtra("message",1);             context.startActivity(intent1);             String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);//获取附加字段,是一个json数组             try {                 JSONObject json = new JSONObject(extras);                 Log.i("jsonObject","---->"+json);                 //进行json.getString("Article")操作时,要保证这里的Article与服务器上的Article一模一样,不然会报空指针异常                 String articleUrl = json.getString("MsgURL");//获取附加字段Article,对应的值为articleUrl                 Log.e("MsgURL:", articleUrl);                 /**                  * 点击通知栏通知, 打开网页地址                  * 把articleUrl通过startActivity发送给WebViewActivity                  */                // Intent intent_WebView = new Intent(Util.OPEN_ADD_FRIEND_PAGE);                 Intent intent_WebView = new Intent(context,WebViewActivity.class);                 //必须要写,不然出错,因为这是一个从非activity的类跳转到一个activity,需要一个flag来说明,这个flag就是Intent.FLAG_ACTIVITY_NEW_TASK                 intent_WebView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                 intent_WebView.putExtra("articleUrl",articleUrl);                // Bundle bundle_WebView = new Bundle();                // bundle_WebView.putString("articleUrl", articleUrl);//文章url                // intent_WebView.putExtras(bundle_WebView);                 intent_WebView.setAction("notification_webview");                 intent_WebView.addCategory("notification_webview");                 context.startActivity(intent_WebView);//打开WebViewActivity                // context.sendBroadcast(intent_WebView);             } catch (JSONException e) {                 e.printStackTrace();             }         }else if(JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())){                                ///////             Log.e("用户收到了消息,消息的ID为:", bundle.getString(JPushInterface.EXTRA_MSG_ID)); //            Intent intent1 = new Intent(Util.SEND_MESSAGE_BROAD); //            intent1.putExtra("bundle",bundle); //            context.sendBroadcast(intent1);             //自定义消息显示弹出框             alertDialog(context); //            LocalBroadcastManager.getInstance(context).sendBroadcast(intent1);         }         //当用户收到了通知(用户只有先收到通知,才能点击通知)         else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {                          ////////             Log.e("用户收到了通知,通知的标题为:", bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE));             String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);//获取通知标题             Log.e("title:", title);             String text = bundle.getString(JPushInterface.EXTRA_ALERT);//获取通知内容             Log.e("text:", text);             String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);//获取附加字段,是一个json数组 //            JSONObject json = null; //            try { //                json = new JSONObject(extras);                 //String imageUrl = json.getString("Image");//获取附加字段Image,对应的值为imageUrl                // Log.e("imageUrl:", imageUrl); //                String articleUrl = json.getString("MsgURL");//获取附加字段Article,对应的值为articleUrl //                Log.e("MsgURL:", articleUrl); //                Intent intent1 = new Intent(context, WebViewActivity.class); //                intent1.putExtra("MsgURL",articleUrl); //            } catch (JSONException e) { //                e.printStackTrace(); //            }             //把articleUrl, imageUrl, text, title的数据存到数据库里 //                SQLOpenHelper helper = new SQLOpenHelper(context); //                helper.add(articleUrl, imageUrl, text, title);             Log.e("已经执行到log", "1");         }     }     private void alertDialog(final Context context) {         Log.i("弹出框",":-------》");         AlertDialog.Builder builder = new AlertDialog.Builder(context);         builder.setTitle("下线通知");         builder.setMessage("您的账号于"+formatter.format(new Date())+"在其它手机上登陆,为了您的信息安全,请及时查看");         builder.setCancelable(false);         builder.setPositiveButton("重新登陆", new DialogInterface.OnClickListener() {             @Override             public void onClick(DialogInterface dialog, int which) {                              }         }); //        builder.setNegativeButton("退出",new DialogInterface.OnClickListener(){ // //            @Override //            public void onClick(DialogInterface dialog, int which) { //                //清楚所有活动界面 //                ActivityCollector.finishAll(); //            } //        });         AlertDialog dialog = builder.create();         dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);         dialog.show();     } }

这里面的代码可能并不全是你能需要的,自己看不需要的可以删除

这里面有我自己写的在获取消息时,点击消息跳转的界面,还有自定义消息(我们使用自定义消息来进行一等登录下线功能)获取时,可以在任意界面弹出下面通知,点击确定后可以跳回到登录界面等等!

8)下面就把最开始的那个初始化类Application类加上:看图:

Android极光推送继承配置

上面这些应该差不多就可以了!

下面就可以在登录你注册的极光账号进行测试吧!如何测试我就不说了,,这么简单,,,哈哈哈哈。。。今天就到这了~~~~~回见。。。。