美文网首页三方
Android 3分钟带你集成极光推送

Android 3分钟带你集成极光推送

作者: 码个蛋 | 来源:发表于2019-06-28 22:25 被阅读12次

话不多说 首先申请极光的账号,(官方地址:https://www.jiguang.cn

1561710140829.png
登录完成之后,先看到这个地方 ,我个人比较喜欢用旧版本,这里点击旧版
1561710235064.png
点击这个创建应用
1561710626969.png
注意这个地方应用名称是必填项,图标是选填,这里我就只填一个应用名称(这里的名称就是Mainface里面的app_name)
1561710724862.png
1561710743741.png
填入名字之后 点击创建我的应用(这里我没试过名字不一样是否可以成功推送,个人觉得没必要做这种尝试)
1561710852958.png
看到创建成功字样后点击完成推送配置:
里面有Android IOS 和win 这里我只演示Android
1561711022205.png
取项目中app目录下的build.gradle文件中的applicationId 对应的值(一般在集成三方库的时候用到包名的,我们都认为这个applicationId 是应用程序的包名),将这个包名复制粘贴到以下页面的选项中并点击保存:
1561711265137.png
点击 下载Demo,把Demo解压到一个文件中如下:
1561711547102.png
很多博客写到这里都是说把解压之的文件以module的方式引入到项目中,经过我自己的测试我发现这样是行不通的,因为极光提供的这个Demo其实是一个eclipse项目,所以在AS上跑是有问题的,经过阅读官方文档和自己的摸索,发现其实这里面有用的就上面标记的两个地方,src里面存放了一些极光为我们生成的一套收消息的类,Mainface里面为我们配置了一些权限信息和其他的东西,这里首先需要按照官方文档配置APP目录下的build.gradle文件: 1561714344089.png

回到首页查看极光推送的文档(这里我只截取build.gradle里面的配置信息):


1561714447363.png

这一这个里面有个JPUSH_APPKEY:需要填入刚刚申请后的APPkey:


1561715348319.png
AS执行以下 Sync Now 以便于下载极光的包

以下都是权限 没什么好说的

<!-- Required  一些系统要求的权限,如访问网络等-->
    <uses-permission android:name="com.yhb.pushdemo.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.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.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    
    <!-- Optional for location -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <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" />

这里主要是要查看Mainface里面的配置信息,备注信息很清楚,这里我就做过多赘述了:

   //参照集成文档中来的文档中
        <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yhb.pushdemo">

    <!-- Required  一些系统要求的权限,如访问网络等-->
    <uses-permission android:name="com.yhb.pushdemo.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.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.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


    <!-- Optional for location -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <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="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- For test only 测试状态通知栏,需要打开的Activity -->
        <activity android:name="com.example.jpushdemo.TestActivity" android:exported="false">
            <intent-filter>
                <action android:name="jpush.testAction" />
                <category android:name="jpush.testCategory" />
            </intent-filter>
        </activity>

        <!-- Rich push 核心功能 since 2.0.6-->
        <activity
            android:name="cn.jpush.android.ui.PopWinActivity"
            android:theme="@style/MyDialogStyle"
            android:exported="false">
        </activity>

        <!-- 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="com.yhb.pushdemo" />
            </intent-filter>
        </activity>

        <!-- Required SDK 核心功能-->
        <!-- 可配置android:process参数将PushService放在其他进程中 -->
        <service
            android:name="cn.jpush.android.service.PushService"
            android:process=":pushcore"
            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 3.0.9 Required SDK 核心功能-->
        <provider
            android:authorities="com.yhb.pushdemo.DataProvider"
            android:name="cn.jpush.android.service.DataProvider"
            android:process=":pushcore"
            android:exported="false"
            />

        <!-- 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.yhb.pushdemo" />
            </intent-filter>

        </service>
        <!-- since 3.1.0 Required SDK 核心功能-->
        <provider
            android:authorities="com.yhb.pushdemo.DownloadProvider"
            android:name="cn.jpush.android.service.DownloadProvider"
            android:exported="true"
            />
        <!-- 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="com.yhb.pushdemo" />
            </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"/>

        <!--since 3.3.0 Required SDK核心功能-->
        <activity
            android:name="cn.jpush.android.service.JNotifyActivity"
            android:exported="true"
            android:taskAffinity="jpush.custom"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.JNotifyActivity" />
                <category android:name="com.yhb.pushdemo" />
            </intent-filter>
        </activity>

        <!-- Since JCore2.0.0 Required SDK核心功能-->
        <!-- 这个Service要继承JCommonService -->
        <service android:name="com.example.jpushdemo.PushService"
            android:process=":pushcore">
            <intent-filter>
                <action android:name="cn.jiguang.user.service.action" />
            </intent-filter>
        </service>


        <!-- User defined.  For test only  用户自定义的广播接收器-->
        <receiver
            android:name="com.example.jpushdemo.MyReceiver"
            android:exported="false"
            android:enabled="true">
            <intent-filter>
                <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  用户接收SDK通知栏信息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required  用户打开自定义通知栏的intent-->
                <action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 -->
                <category android:name="com.yhb.pushdemo" />
            </intent-filter>
        </receiver>

        <!-- User defined.  For test only  用户自定义接收消息器,3.0.7开始支持,目前新tag/alias接口设置结果会在该广播接收器对应的方法中回调-->
        <receiver android:name="com.example.jpushdemo.MyJPushMessageReceiver">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
                <category android:name="com.yhb.pushdemo"></category>
            </intent-filter>
        </receiver>
        <!-- Required  . Enable it you can get statistics data with channel -->
        <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
        <meta-data android:name="JPUSH_APPKEY" android:value="af286405fb9a70a376ad2669" /> <!--  </>值来自开发者平台取得的AppKey-->

    </application>

</manifest>

复制上去之后,会有以下几处报错,这几处报错只需要把src下面对应的类拷贝过来,然后修改Mainface里面的路径名即可


image.png
image.png
image.png
image.png

新增完后的项目目录:


image.png

可看到还有两个类报错,这个时候,看看一看里面需要的东西,差什么拷贝什么
最后剩下一个MainActivity里面需要添加东西,这里我直接拷贝过来

package com.yhb.pushdemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    public static boolean isForeground = false;

    private MessageReceiver mMessageReceiver;
    public static final String MESSAGE_RECEIVED_ACTION = "com.example.jpushdemo.MESSAGE_RECEIVED_ACTION";
    public static final String KEY_TITLE = "title";
    public static final String KEY_MESSAGE = "message";
    public static final String KEY_EXTRAS = "extras";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void registerMessageReceiver() {
        mMessageReceiver = new MessageReceiver();
        IntentFilter filter = new IntentFilter();
        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        filter.addAction(MESSAGE_RECEIVED_ACTION);
        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, filter);
    }

    public class MessageReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                if (MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) {
                    String messge = intent.getStringExtra(KEY_MESSAGE);
                    String extras = intent.getStringExtra(KEY_EXTRAS);
                    StringBuilder showMsg = new StringBuilder();
                    showMsg.append(KEY_MESSAGE + " : " + messge + "\n");
                    if (!ExampleUtil.isEmpty(extras)) {
                        showMsg.append(KEY_EXTRAS + " : " + extras + "\n");
                    }
                    Toast.makeText(context, showMsg.toString(), Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e){
            }
        }
    }

    @Override
    protected void onResume() {
        isForeground = true;
        super.onResume();
    }


    @Override
    protected void onPause() {
        isForeground = false;
        super.onPause();
    }
}

最后一步,初始化极光推送:

package com.yhb.pushdemo;

import android.app.Application;

import cn.jpush.android.api.JPushInterface;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        JPushInterface.setDebugMode(true);
        JPushInterface.init(this);
    }
}

在Mainface中新增如下代码:


image.png

这个时候在AndroidStudio中Rebuild一下,然后安装app到手机上,注意这里最好使用真机(楼主使用的真机测试,不知道模拟器是否可以)
这个时候我们就可以开始在极光后台给我们的手机推送数据了
推送数据第一步:


image.png

注意这个列表10分钟刷新一次,所有有时候我们看到的用户数不对,是因为没有及时刷新,所以不必担心
在这个页面点击相应的应用,这里我点击极光测试用例然后进入:


image.png

点击这里的 “推送” 然后进入:


image.png
可以看到当前这个页面中的推送历史是什么都没有的,然后点击这里 “发送通知” 进入发送通知页面
左边是发送的测试信息,右边是接收的平台,我这里是Android
(注意:如果右边这个方框里面没有如图显示)
image.png

或者以下这四个按钮不可选的时候,,说明在前面配置极光的时候少了一步


image.png

如果右边的手机没有出现,或者是方框内什么都没有,亦或是以上四个目标平台不可选的时候,那么大概率是缺少以下配置:(方框内有显示的,可以忽略此步骤)


1561710852958.png

如果没问题,选择对应的平台,我这里选择Android(选择的平台需要在推送配置里面配置好之后,才可以在这里选择你想要推送的平台)

以下目标人群和发送时间我这边都是默认的,这里需要注意的是 这个立即发送按钮,如果显示是蓝色的,说明上面的信息都没有问题,否则你需要再次检查上面需要填写的内容


image.png

点击立即发送,在手机上看到如下效果,说明推送已经集成成功


image.png
还可以在极光的控制台看到详细的数据如下,也说明推送集成成功,一般情况下两种都可以看到:
image.png

至此,推送的demo就完全集成完了,小伙伴们可以根据自己的业务在之前copy的接收器和TestActivity里面做自己的业务逻辑了,当然 我这里实现的只是最简单的推送逻辑,更多详细内容请查看官方集成文档。
如有问题,可以在下方给博主留言哦,博主也是一位菜鸡,希望各位大佬不喜轻喷,在这里先行谢谢各位!

相关文章

网友评论

    本文标题:Android 3分钟带你集成极光推送

    本文链接:https://www.haomeiwen.com/subject/sfwecctx.html