Maven集成(推荐)

Maven集成(推荐)

前言

  • 本文档介绍Android Studio提供的基于Maven的快速集成方案,配置简单、不容易出问题、后续更新维护方便,因此我们强烈推荐应用开发者根据本文档步骤进行个推集成。
  • 本文档适用SDK版本:2.9.5.0及以后
  • 请参考Getui_SDK_Demo_AS_mavenDemo工程

1. 创建个推应用

  • 请参考 创建应用 获取相应的AppIDAppKeyAppSecret信息。

2. 添加个推相关配置


由手动集成切换到Maven,需删除原有集成配置再进行新集成

2.1 添加Maven库地址

  • 在项目根目录build.gradle文件中,添加个推maven库地址,如下所示:

img_asmv_maven

maven {
    url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
}

2.2 配置依赖

  • app/build.gradle文件中引用个推SDK依赖库,如下图所示:

img_asmv_dep

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.getui:sdk:2.13.3.0'
}

2.3 配置 so 库

目前个推SDK支持armeabiarmeabi-v7aarm64-v8amipsmips64x86x86_64这几种 CPU 架构,请根据项目情况指定所需的架构。


如果项目中其他 so 库只支持其中某几种 cpu 架构,那么应该根据其他 so 库所支持的 CPU 架构的最小集来配置。否则如果在特定架构上未能支持所有 so 库,则很可能导致程序运行异常。切记!

  • app/build.gradle文件中的android.defaultConfig下指定所需的 CPU 架构,如下图所示:

img_asmv_son

android {
  ...
  defaultConfig {
    ...
    ndk {
        // 添加项目所需CPU类型的最小集
      abiFilters "armeabi", "armeabi-v7a", "x86_64"
    }
  }
}
  • 若AndroidStudio编译出现以下报错:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. 

请在项目根目录gradle.properties文件中添加:

android.useDeprecatedNdk=true

2.4 配置个推应用参数

  • app/build.gradle文件中的android.defaultConfig下添加manifestPlaceholders,配置个推相关的应用参数(参见【步骤1】),如下图所示:

img_asmv_param

manifestPlaceholders = [
    GETUI_APP_ID : "APP_ID",
    GETUI_APP_KEY : "APP_KEY",
    GETUI_APP_SECRET : "APP_SECRET"
]
  • 请根据【步骤1】获取到的应用参数进行相应替换APP_IDAPP_KEYAPP_SECRET的值

2.5 适配Android P

  • 在Android 9.0以上默认不支持http通信,为保证SDK正常使用,maven库中已添加如下属性(注:如遇工程报错找不到该属性,将app/build.gradle中的compileSdkVersion改为23以上即可):
<application android:usesCleartextTraffic="true">

2.6 配置自定义推送服务

为了让推送服务在部分主流机型上更稳定运行,从2.9.5.0版本开始,个推支持第三方应用配置使用自定义Service来作为推送服务运行的载体。

  • 在项目源码中添加一个继承自com.igexin.sdk.PushService的自定义Service:
package com.getui.demo;

// 仅2.13.1.0及以上版本才能直接extends PushService,低于此版本请延用之前实现方式
public class DemoPushService extends com.igexin.sdk.PushService {

}

  • 在AndroidManifest.xml中添加上述自定义Service (使用maven集成,process属性必须为pushservice,切勿更改):
<service
  android:name="com.getui.demo.DemoPushService"
  android:exported="true"
  android:label="PushService"
  android:process=":pushservice">
</service>

2.7 配置可选权限

  • 上述接入方式已包含个推服务所需的所有必备权限。在此之外,您还可以配置以下可选权限,以便使用个推3.0提供的电子围栏功能。请在AndroidManifest.xml<manifest>根标签下添加如下配置:
<!-- 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_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

2.8 导入通知栏图标

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

  • 建议的push.png图片尺寸如下:
ldpi:    48*48
mdpi:    64*64
hdpi:    96*96
xhdpi:   128*128
xxhdpi:  192*192
  • 该图标push.png将会作为通知图标,如下所示:

img_asmv_pushicon

  • 建议的push_small.png图片尺寸如下:
ldpi:    18*18
mdpi:    24*24
hdpi:    36*36
xhdpi:   48*48
xxhdpi:  72*72
xxxhdp:  96*96
  • 该图标push_small.png将会作为通知图标展示在通知栏顶部,如下所示:

img_asmv_small_icon

2.9 资源精简配置

2.9.1 shrinkResources

  • 如果您的工程启用了资源精简,即如果在app/build.gradleandroid.buildTypes.release下配置了shrinkResources true,为了避免个推SDK所需资源被错误精简导致功能异常,需要在项目资源目录res/raw中添加keep.xml文件,路径如下:

  • 如果你的项目工程已经使用了keep.xml,则只需在tools:keep中增加对@layout/getui_notification的声明,例如:
<?xml version="1.0" encoding="utf-8"?>
<resources
    xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@layout/other_res,...,
    @layout/getui_notification,
    @drawable/push,
    @drawable/push_small"/>
   <!-- 若您需要使用其他自定义推送图标,也需要在此处添加 -->

2.9.2 AndResGuard

  • 如果您的工程使用了AndResGuard进行资源精简,为了避免个推SDK所需资源被错误精简导致功能异常,需要为个推添加白名单配置。

gradle集成AndResGuard的方式,需要您在andResGuardwhiteList节点下添加如下代码:

andResGuard {
    ...
    whiteList = [
           ...
           // for getui
           "R.drawable.push",        
           "R.drawable.push_small",
           "R.layout.getui_notification",
           "R.id.getui_*"
           // 若您需要使用其他自定义推送图标,也需要在此处添加
    ]
    ...
}

命令行使用AndResGuard的方式,需要您在config.xml文件中的<issue id=whitelist>节点下添加如下代码

<issue id="whitelist" isactive="true">
    <path value="<your_package_name>.R.drawable.push"/>
    <path value="<your_package_name>.R.drawable.push_small"/>
    <path value="<your_package_name>.R.layout.getui_notification"/>
    <path value="<your_package_name>.R.id.getui_*"/>
    <!-- 若您需要使用其他自定义推送图标,也需要在此处添加 -->
</issue>

3. 编写集成代码

3.1 初始化SDK

我们建议开发者在主进程的Application.onCreate()、Activity.onCreate()方法中初始化个推SDK。多次调用SDK初始化并无影响。

  • 个推SDK初始化方法。如果使用了自定义推送服务,调用时还需要传入自定义推送服务名:
// DemoPushService 为【步骤2.6】自定义的推送服务
com.igexin.sdk.PushManager.getInstance().initialize(getApplicationContext(), com.getui.demo.DemoPushService.class);

3.2 接收推送服务事件

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

/**
 * 继承 GTIntentService 接收来自个推的消息, 所有消息在线程中回调, 如果注册了该服务, 则务必要在 AndroidManifest中声明, 否则无法接受消息<br>
 */
public class DemoIntentService extends GTIntentService {

    public DemoIntentService() {
    }

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

      // 处理透传消息
    @Override
    public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
        // 透传消息的处理方式,详看SDK demo
    }

      // 接收 cid
    @Override
    public void onReceiveClientId(Context context, String clientid) {
        Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);
    }

      // cid 离线上线通知
    @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 类:
<!-- permission属性在2.13.1.0版本后必须配置 -->
<service 
    android:name="com.getui.demo.DemoIntentService"
    android:permission="android.permission.BIND_JOB_SERVICE"/>
  • 在个推SDK初始化后,注册上述 IntentService 类:
// DemoIntentService 为第三方自定义的推送服务事件接收类
com.igexin.sdk.PushManager.getInstance().registerPushIntentService(getApplicationContext(), com.getui.demo.DemoIntentService.class);


关于原有广播方式和新的IntentService方式兼容性说明:

  1. 如果调用了registerPushIntentService方法注册自定义IntentService,则SDK仅通过IntentService回调推送服务事件;
  2. 如果未调用registerPushIntentService方法进行注册,则原有的广播接收器仍然可以继续使用。

4. 测试

4.1 验证clientid和通知

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

img_as_logcat

  • 登录 个推开发者中心,进入【个推·消息推送】产品,点击【创建推送】,进入待测试应用的推送通知界面:

img_as_conlose

  • 依次填写通知标题通知内容,点击发送按钮即可向该推送应用名下所有CID推送通知消息。具体推送操作方法详见:创建推送通知

  • 如果手机或模拟器收到消息,显示下图所示通知,那么恭喜您,个推SDK接入测试已经成功完成!

img_as_success

4.2 验证结果

  • 若【步骤4.1】验证失败,建议重新按步骤仔细检查集成!!
  • 可参考个推SDK集成Demo,资料包中的路径如下:
GETUI_ANDROID_SDK/
  | - Demo工程/
  |    |- Getui_SDK_Demo_AS_maven/ (AndroidStudio快速集成Demo工程)
开发者中心 SDK 下载

文档中心搜索