极光征文

极光征文 | 我与极光推送在一起的第二年

2019-01-03  本文已影响127人  流船
image.png

背景

我是在两年前认识极光,没错是通过老师认识的,极光给了我第一个印象"推送",导致现在极光推送四个字已经成了一个领域的代名词。就和提起当当网 第一个印象就是"书城"一样,除了推送做的好以外,极光的IM、统计、短信认证等等我都在用。这篇文章主要分享一下我与极光的故事、并且分享android端集成推送的步骤。

当时在学校的时候,老师为了培养我们自己在网上查阅资料自学一些三方sdk的使用,例如:地图、统计、推送、等等以后项目会经常用到的一些知识。印象最深的就是"极光推送",因为极光是我接触的第一个三方的平台。参加工作之后推送一直在用极光的服务,比想象中的还易集成、效率高。

功能说明

极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率。极光推送客户端支持 Android,iOS 两个平台。
本 Android SDK 方便开发者基于 JPush 来快捷地为 Android App 增加推送功能。

主要功能

主要特点

步骤

第一步:创建应用

image.png

创建完成之后拿到AppKey,没错这个AppKey就是让你创建好的应用,通过一些配置信息和你Studio上的project关联上。我的是: AppKey ee1deb569254b851888ed8fa

image.png

之后继续跟进推送设置。点击完成推送设置之后会设置包名


image.png

例如:我创建好的项目包名是 如下图: 点击保存之后应用就已经设置好了。接下来进行项目配置。


image.png

第二步:项目配置

1.首先去官网下载好极光的sdk下载页
2.下载成功后将Jpush-android-3.x.x-release.zip压缩包的内容解压如下图所示目录结构
3.打开下载好的包。如下图


我们需要做的就是把目录libs文件夹下的复制到我们的project中,接下来按照文档中的自动集成方式进行操作
image.png
buildscript {

repositories {
    google()
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.1.2'
    

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
repositories {
    google()
    jcenter()
}
}

进行到这里通知就已经完全可以收到了,但是如果要和后台交互的话,这样是完全不够的,需要我们自定义广播,还需要绑定设备id也就是RegistrationID,而这个id是怎么拿到的呢?文档已经给我们自定义好了Receiver参考:

public class MyReceiver extends BroadcastReceiver {
private static final String TAG = "MyReceiver";
 
private NotificationManager nm;
 
@Override
public void onReceive(Context context, Intent intent) {
   String content=intent.getStringExtra("msgContent");
    Bundle bundle=intent.getExtras();
    regId = JPushInterface.getRegistrationID(context);
   // SharedPreferencesUtils.
    Log.e(TAG, "广播的id " + regId);
    SharedPreferencesUtils.saveString(context, "regId", regId);

    if (null == nm) {
        nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    }
     
    Bundle bundle = intent.getExtras();
    Logger.d(TAG, "onReceive - " + intent.getAction() + ", extras: " + AndroidUtil.printBundle(bundle));
     
    if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
        Logger.d(TAG, "JPush 用户注册成功");
         
    } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
        Logger.d(TAG, "接受到推送下来的自定义消息");
                 
    } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
        Logger.d(TAG, "接受到推送下来的通知");
 
        receivingNotification(context,bundle);

    } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
        Logger.d(TAG, "用户点击打开了通知");
    
       openNotification(context,bundle);

    } else {
        Logger.d(TAG, "Unhandled intent - " + intent.getAction());
    }
}


 private void receivingNotification(Context context, Bundle bundle){
 String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);
    Logger.d(TAG, " title : " + title);
    String message = bundle.getString(JPushInterface.EXTRA_ALERT);
    Logger.d(TAG, "message : " + message);
    String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
    Logger.d(TAG, "extras : " + extras);
}

private void openNotification(Context context, Bundle bundle){
    String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
    String myValue = "";
    try {
        JSONObject extrasJson = new JSONObject(extras);
        myValue = extrasJson.optString("myKey");
    } catch (Exception e) {
        Logger.w(TAG, "Unexpected: extras is not a valid json", e);
        return;
    }
    if (TYPE_THIS.equals(myValue)) {
        Intent mIntent = new Intent(context, ThisActivity.class);
        mIntent.putExtras(bundle);
        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(mIntent);
    } else if (TYPE_ANOTHER.equals(myValue)){
        Intent mIntent = new Intent(context, AnotherActivity.class);
        mIntent.putExtras(bundle);
        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(mIntent);
    }
}
}

完结

到这里其实已经就算完工了,app端集成起来还是蛮简单的,如果有需要还可以继续完成自定义消息、通知样式、等等。这里也只是简单的介绍一下极光推送的使用步骤,如果开发者有进一步的了解的话还需要多看一下文档,或者移步至极光社区,今天写这个文章一是为了参加活动 二是记录一下脚印。希望一年之后的自己在看到这篇文章的时候能说一句"好菜 真的好菜啊哈哈~~" 进步的标志~ 如果有不足的地方还请更正一下 3q~

另外祝认真看完这篇文章的人 新年快乐 啊哈哈。

「本文为极光征文参赛文章」

上一篇下一篇

猜你喜欢

热点阅读