Android 使用第三方SDK极光实现推送功能

本文详细介绍了如何在Android应用中集成极光SDK,包括导入模块、配置SDK、初始化、服务和广播配置,以及处理推送和tagalias逻辑,旨在帮助开发者实现稳定的消息推送功能。
摘要由CSDN通过智能技术生成

前言

这是我第一次写博客,今天学习了使用第三方sdk实现推送,为防止下次使用时忘记,在此记录下来,文章参考了极光自带的集成指南与其他大佬的代码,侵权私删。

JIGUANG SDK 集成指南

jiguang_sdk.zip 集成压缩包内容

  • jiguang

    • JIGUANG SDK 组合包。
  • jiguang-demo

    • JIGUANG SDK 组合包集成 demo。
  • doc

    • 文档说明。

集成步骤

导入 JIGUANG SDK

通过 AS 将 SDK 作为 module 导入项目

导入步骤:AndroidStudio -> File -> New -> Import Module -> 选择 jiguang 导入

配置 JIGUANG SDK

settings.gradle 配置添加:

include  ':jiguang'

在 module 的 gradle 中 添加 SDK 依赖,以 jpush 为例

android {
    defaultConfig {
        applicationId "com.xxx.xxx" //JPush 上注册的包名.
     manifestPlaceholders = [
                JPUSH_PKGNAME : applicationId,
                JPUSH_APPKEY : "386f567a31662ab695ea6703", //极光开发平台上注册的包名对应的appkey.
                JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
                //xiaomi_config_start
                XIAOMI_APPID  : "MI-小米的APPID",
                XIAOMI_APPKEY : "MI-小米的APPKEY",
                //xiaomi_config_end
                //oppo_config_start
                OPPO_APPKEY   : "OP-oppo的APPKEY",
                OPPO_APPID    : "OP-oppo的APPID",
                OPPO_APPSECRET: "OP-oppo的APPSECRET",
                //oppo_config_end
                //vivo_config_start
                VIVO_APPKEY   : "vivo的APPKEY",
                VIVO_APPID    : "vivo的APPID",
                //vivo_config_end
        ]
    }
}

dependencies {
    implementation project(':jiguang')
}

编译 jiguang-demo 运行

JIGUANG SDK 配置指南

在Application中初始化

package com.example.practice.app;

import android.app.Application;
import android.content.Context;
import cn.jpush.android.api.JPushInterface;

public class MyApp extends Application {
   
    public static Context context;

    @Override
    public void onCreate() {
   
        super.onCreate();
        context = this;
        initJPush();
    }
    //初始化极光
    private void initJPush() {
   
        JPushInterface.setDebugMode(true);    // 设置开启日志,发布时请关闭日志
        JPushInterface.init(this);            // 初始化 JPush
    }

}

服务配置

如果您使用的JCore是2.0.0及更高版本,需要额外在Androidmanifest中配置一个Service,以在更多手机平台上获得更稳定的支持,示例如下。(JCore1.x版本不需要)

在清单文件(Androidmanifest)下注册服务

<!-- Since JCore2.0.0 Required SDK核心功能-->
 <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
<!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
     <service android:name=".jpush.pushService"
            android:enabled="true"
            android:exported="false"
            android:process=":pushcore">
            <intent-filter>
                <action android:name="cn.jiguang.user.service.action" />
            </intent-filter>
        </service>

java代码

package com.example.practice.jpush;

import cn.jpush.android.service.JCommonService;

public class pushService extends JCommonService {
   

}

广播配置

从JPush3.0.7开始,需要配置继承JPushMessageReceiver的广播,原来如果配了MyReceiver现在可以弃用。示例如下。

在清单文件(Androidmanifest)下注册广播

   <receiver
            android:name=".jpush.PushMessageReceiver"
            android:enabled="true"
            android:exported="false" >
            <intent-filter>
                <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
                <category android:name="com.example.practice" />
            </intent-filter>
        </receiver>

java代码

package com.example.practice.jpush;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

import org.json.JSONException;
import org.json.JSONObject;

import cn.jpush.android.api.CmdMessage;
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.service.JPushMessageReceiver;

public class PushMessageReceiver extends JPushMessageReceiver {
   
    private static final String TAG = "PushMessageReceiver";
    @Override
    public void onMessage(Context context, CustomMessage customMessage) {
   
        Log.e(TAG,"[onMessage] "+customMessage);
        processCustomMessage(context,customMessage);
    }

    @Override
    public void onNotifyMessageOpened(Context context, NotificationMessage message) {
   
        Log.e(TAG,"[onNotifyMessageOpened] "+message);
        try{
   
            //打开自定义的Activity
            Intent i = new Intent(context, TestJPushActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,message.notificationTitle);
            bundle.putString(JPushInterface.EXTRA_ALERT,message.notificationContent);
            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);
        }catch (Throwable throwable){
   

        }
    }

    @Override
    public void onMultiActionClicked(Context context, Intent intent) {
   
        Log.e(TAG, "[onMultiActionClicked] 用户点击了通知栏按钮");
        String nActionExtra = intent.getExtras().getString(JPushInterface.EXTRA_NOTIFICATION_ACTION_EXTRA);

        //开发者根据不同 Action 携带的 extra 字段来分配不同的动作。
        if(nActionExtra==null){
   
            Log.d(TAG,"ACTION_NOTIFICATION_CLICK_ACTION nActionExtra is null");
            return;
        }
        if (nActionExtra.equals("my_extra1")) {
   
            Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮一");
        } else if (nActionExtra.equals("my_extra2")) {
   
            Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮二");
        } else if (nActionExtra.equals("my_extra3")) {
   
            Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮三");
        } else {
   
            Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮未定义");
        }
    }

    @Override
    public void onNotifyMessageArrived(Context context, NotificationMessage message) {
   
        Log.e(TAG,"[onNotifyMessageArrived] "+message);
    }

    @Override
    public void onNotifyMessageDismiss(Context context, NotificationMessage message) {
   
        Log.e(TAG,"[onNotifyMessageDismiss] "+message);
    }

    @Override
    public void onRegister(Context context, String registrationId) {
   
        Log.e(TAG,"[onRegister] "+registrationId);
    }

    @Override
    public void onConnected(Context context, boolean isConnected) {
   
        Log.e(TAG,"[onConnected] "+isConnected);
    }

    @Override
    public void onCommandResult(Context context, CmdMessage cmdMessage) {
   
        Log.e(TAG,"[onCommandResult] "+cmdMessage);
    }

    @Override
    public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
   
        TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage);
        super.onTagOperatorResult(context, jPushMessage);
    }
    @Override
    public void onCheckTagOperatorResult(Context context,JPushMessage jPushMessage){
   
        TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context,jPushMessage);
        super.onCheckTagOperatorResult(context, jPushMessage);
    }
    @Override
    public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
   
        TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context,jPushMessage);
        super.onAliasOperatorResult(context, jPushMessage);
    }

    @Override
    public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
   
        TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage);
        super.onMobileNumberOperatorResult(context, jPushMessage);
    }

    //send msg to MainActivity
    private 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值