Android个推快速集成

个推真是个磨人的小妖精啊...啊.....

个推官网:个推官网

android文档:android 个推文档

推送的Json串中带url时踩过的坑:JsonObject解析url报Method threw 'org.json.JSONException' exception.

1、创建个推应用

登录 http://dev.getui.com ,选择登记应用并填写应用名称和包名信息,完成应用创建
image
image

点击应用配置,获取到相应的AppID、AppKey、AppSecret信息:

image

2、配置依赖

添加Maven库地址

在以项目名为命名的顶层build.gradle文件中,添加个推maven库地址,如下所示:

//Maven URL地址
maven {
    url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
}
在app/build.gradle文件中引用个推SDK依赖库,如下图所示:
dependencies {
 implementation 'com.getui:sdk:2.12.5.0'
}

在app/build.gradle文件中的android.defaultConfig下指定所需的 CPU 架构:

android {
  ...
  defaultConfig {
    ...
    ndk {
      abiFilters "armeabi", "armeabi-v7a", "x86_64"
    }
  }
}
配置个推应用参数

在app/build.gradle文件中的android.defaultConfig下添加manifestPlaceholders,配置个推相关的应用参数:

manifestPlaceholders = [
    GETUI_APP_ID : "APP_ID",
    GETUI_APP_KEY : "APP_KEY",
    GETUI_APP_SECRET : "APP_SECRET"
]

请根据在后台创建应用获取到的应用参数进行相应替换APP_ID、APP_KEY、APP_SECRET的值

适配Android P

Android9.0以上默认不支持http通信,为保证SDK正常使用
请在application节点下新增该属性

<application android:usesCleartextTraffic="true">

3、添加权限声明


<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.VIBRATE" />

<uses-permission android:name="android.permission.GET_TASKS" />

<!-- 支持iBeancon 需要蓝牙权限 -->

<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<!-- 支持个推3.0 电子围栏功能 -->

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- 浮动通知权限 -->

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

<!-- 自定义权限 -->

<uses-permission android:name="getui.permission.GetuiService.${applicationId}" />

<permission

    android:name="getui.permission.GetuiService.${applicationId}"

    android:protectionLevel="normal" >

</permission>

<!-- 个推SDK权限配置结束 -->

4、导入通知栏图标

为了修改默认的通知图标以及通知栏顶部提示小图标,请在资源目录的res/drawable-ldpi/、res/drawable-mdpi/、res/drawable-hdpi/、res/drawable-xhdpi/、res/drawable-xxhdpi/等各分辨率目录下,放置相应尺寸的文件名为push.png和push_small.png图片

建议的push.png图片尺寸如下 :(但是我好像没遵守也行)

ldpi:4848
mdpi:64
64
hdpi:9696
xhdpi:128
128
xxhdpi:192*192

建议的push_small.png图片尺寸如下:(但是我好像没遵守也行)

ldpi:1818
mdpi:24
24
hdpi:3636
xhdpi:48
48
xxhdpi:7272
xxxhdp:96
96

5、 接收推送服务事件

在 接收推送服务事件项目源码中添加一个继承自com.igexin.sdk.GTIntentService的类,用于接收CID、透传消息以及其他推送服务事件。请参考下列代码实现各个事件回调方法:

public void onReceiveMessageData(Context context, GTTransmitMessage msg)是透传消息的处理

通知推送时下面有个高级设置,这个里面的透传消息可以在那里设置,如果后端使用的NotificationTemplate模板,那么点击后才会回调此方法,在这个里面可以 进行消息处理并进行分发跳转, 可以用EventBus传递到所有界面透传消息也会传到这个方法里面,绑定别名推送不分IOS还是android,android会直接走到这个里面,会导致自动跳转,透传的message中可以写一个type,标记是android还是IOS,客户端进行判处理(我是这样解决的)

package com.getui.demo;

import android.content.Context;
import android.os.Message;
import android.util.Log;

import com.igexin.sdk.GTIntentService;
import com.igexin.sdk.PushConsts;
import com.igexin.sdk.PushManager;
import com.igexin.sdk.message.FeedbackCmdMessage;
import com.igexin.sdk.message.GTCmdMessage;
import com.igexin.sdk.message.GTTransmitMessage;
import com.igexin.sdk.message.SetTagCmdMessage;

import org.json.JSONObject;

/**
 * 继承 GTIntentService 接收来自个推的消息, 所有消息在线程中回调,
 * 如果注册了该服务, 则务必要在 AndroidManifest中声明, 否则无法接受消息<br>
 * <p>
 * onReceiveMessageData 处理透传消息<br>
 * <p>
 * onReceiveClientId 接收 cid <br>
 * <p>
 * onReceiveOnlineState cid 离线上线通知 <br>
 * <p>
 * onReceiveCommandResult 各种事件处理回执 <br>
 */
public class IntentService extends GTIntentService {

    public DemoIntentService() {

    }

    @Override
    public void onReceiveServicePid(Context context, int pid) {

    }


    @Override
    public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
        byte[] payload = msg.getPayload();
        String message = new String(payload);
        Log.i(TAG, "onReceiveMessageData: " + message);
        try {
            JSONObject json = new JSONObject(message);
            String pushType = json.getString("PHONE_TYPE");
            if ("ANDROID".equals(pushType)) {
                //new UsuallyEvent(message, UsuallyEvent.PUSH)是自己写的Event
                EventBus.getDefault().post(new UsuallyEvent(message, UsuallyEvent.PUSH));
            }
        } catch (Exception e) {
            Log.e(TAG, e.toString());
        }

    }

    @Override
    public void onReceiveClientId(Context context, String clientid) {

        Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);

    }

    @Override
    public void onReceiveOnlineState(Context context, boolean online) {

    }

    @Override
    public void onReceiveCommandResult(Context context, GTCmdMessage cmdMessage) {

    }

    @Override
    public void onNotificationMessageArrived(Context context, GTNotificationMessage msg) {

    }

    @Override
    public void onNotificationMessageClicked(Context context, GTNotificationMessage msg) {

    }

}

在AndroidManifest.xml中配置上述 IntentService 类:

<service android:name="com.getui.demo.IntentService"/>

6、 初始化SDK并注册com.getui.demo.IntentService

PushManager.getInstance().initialize(this.getApplicationContext(),PushService.class);
// com.getui.demo.IntentService 为第三方自定义的推送服务事件接收类
PushManager.getInstance().registerPushIntentService(this.getApplicationContext(), com.getui.demo.IntentService.class);

7、测试

连接手机或启动Android模拟器,编译运行你的工程,查看logcat信息。在搜索框中输入clientid,如果能显示clientid is xxx日志,则说明个推SDK已经成功运行起来了,去后台推送就行了:


image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容