Android 推送實(shí)現(xiàn)-接入個(gè)推(GTPush)

自己使用過(guò)的推送服務(wù):極光推送(Jpush)、友盟推送、個(gè)推、阿里推送,其他的目前還沒(méi)用用過(guò),但使用起來(lái)應(yīng)該都是比較類(lèi)似的吧!

本文將簡(jiǎn)單介紹下這次個(gè)推推送的接入流程,及相關(guān)的注意事項(xiàng)(個(gè)推開(kāi)通廠商通道需要單獨(dú)聯(lián)系客服,開(kāi)通VIP,然后個(gè)推的技術(shù)就會(huì)和你對(duì)接)。

1.配置 Maven 庫(kù)地址:

項(xiàng)目根目錄下build.gradle

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        ......
    }
}

allprojects {
    repositories {
        jcenter()
        google()
        maven {
            url "http://mvn.gt.getui.com/nexus/content/repositories/releases/"
        }
    }
}
2.NDK過(guò)濾:

app根目錄下build.gradle

android {
    defaultConfig {
        ndk {
            // 添加項(xiàng)目所需 CPU 類(lèi)型的最小集
            abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86"
        }
    }
}
3.參數(shù)配置:

app根目錄下build.gradle

android {
    defaultConfig {
        manifestPlaceholders = [
                //個(gè)推應(yīng)用參數(shù),請(qǐng)?zhí)顚?xiě)您申請(qǐng)的 GETUI_APP_ID,GETUI_APP_KEY,GETUI_APP_SECRET 值
                GETUI_APP_ID    : "",
                GETUI_APP_KEY   : "",
                GETUI_APP_SECRET: "",
                GETUI_APPID     : "",
                //廠商參數(shù)配置,在各個(gè)廠商開(kāi)放平臺(tái)認(rèn)證、申請(qǐng)推送引用,查看對(duì)應(yīng)的配置信息,開(kāi)通推送服務(wù)
                XIAOMI_APP_ID   : "",
                XIAOMI_APP_KEY  : "",
                MEIZU_APP_ID    : "",
                MEIZU_APP_KEY   : "",
                HUAWEI_APP_ID   : "",
                OPPO_APP_KEY    : "",
                OPPO_APP_SECRET : "",
                VIVO_APP_ID     : "",
                VIVO_APP_KEY    : "",
        ]     
    }
}
4.添加依賴(lài):
    // 個(gè)推SDK 3.0 的主包
    implementation 'com.getui:gtsdk:3.0.2.0'
    //支持的廠商包
    implementation 'com.huawei.hms:push:4.0.2.300'
    implementation 'com.getui.opt:hwp:3.0.1'
    implementation 'com.getui.opt:xmp:3.0.1'
    implementation 'com.getui.opt:mzp:3.0.1'
    implementation 'com.assist-v3:vivo:3.0.1'
    implementation 'com.assist-v3:oppo:3.0.1'
5.權(quán)限添加:

涉及到過(guò)敏權(quán)限的需要添加動(dòng)態(tài)權(quán)限申請(qǐng),在這里推薦下郭林的PermissionX:https://blog.csdn.net/guolin_blog/article/details/107427463

<!-- iBeancon 功能所需權(quán)限 -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- 個(gè)推電子圍欄功能所需權(quán)限 -->
<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" />
6.配置推送服務(wù)(個(gè)人理解:該服務(wù)是用于創(chuàng)建對(duì)應(yīng)的服務(wù)進(jìn)程):

1.自定義Service集成自PushService :

package 你的包名.service;

// 僅 2.13.1.0 及以上版本才能直接 extends PushService,低于此版本請(qǐng)延用之前實(shí)現(xiàn)方式
public class YouPushService extends com.igexin.sdk.PushService {

}

2.在 AndroidManifest.xml 中添加上述自定義 Service,(使用 maven 集成,android:process 屬性必須為 pushservice。手動(dòng)集成方式也請(qǐng)保證與其他組件進(jìn)程名一致,建議復(fù)制本文檔的默認(rèn)配置即可),如下:

 <!-- 請(qǐng)根據(jù)您當(dāng)前自定義的 PushService 名稱(chēng)路徑進(jìn)行配置-->
  <service
      android:name="你的包名.YouPushService"
      android:exported="true"
      android:label="PushService"
      android:process=":pushservice"/>
7.配置接受推送事件服務(wù)(該服務(wù)使用于接受推送事件的):

1.添加一個(gè)繼承自 com.igexin.sdk.GTIntentService 的類(lèi),用于接收 CID、透?jìng)飨⒁约捌渌扑头?wù)事件。請(qǐng)參考下列代碼實(shí)現(xiàn)各個(gè)事件回調(diào)方法:

package 你的包名.service;

import android.content.Context;
import android.os.Message;
import com.blankj.utilcode.util.LogUtils;
import com.igexin.sdk.PushManager;
import com.igexin.sdk.message.GTCmdMessage;
import com.igexin.sdk.message.GTNotificationMessage;
import com.igexin.sdk.message.GTTransmitMessage;

/**
 * Des: 繼承 GTIntentService 接收來(lái)自個(gè)推的消息,所有消息在線程中回調(diào),如果注冊(cè)了該服務(wù),則務(wù)必要在 AndroidManifest 中聲明,否則無(wú)法接受消息
 * Created by kele on 2020/9/21.
 * E-mail:984127585@qq.com
 */
public class GTIntentService extends com.igexin.sdk.GTIntentService {

    private static final String TAG = GTIntentService.class.getSimpleName();

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

    }

    // 接收 cid
    @Override
    public void onReceiveClientId(Context context, String s) {
        LogUtils.d(TAG, "onReceiveClientId=" + s);
    }

    // 處理透?jìng)飨?    @Override
    public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
        String appid = msg.getAppid();
        String taskid = msg.getTaskId();
        String messageid = msg.getMessageId();
        byte[] payload = msg.getPayload();
        String pkg = msg.getPkgName();
        String cid = msg.getClientId();

        // 第三方回執(zhí)調(diào)用接口,actionid范圍為90000-90999,可根據(jù)業(yè)務(wù)場(chǎng)景執(zhí)行
        boolean result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, 90001);
        LogUtils.d(TAG, "call sendFeedbackMessage = " + (result ? "success" : "failed"));

        LogUtils.d(TAG, "onReceiveMessageData -> " + "appid = " + appid + "\ntaskid = " + taskid + "\nmessageid = " + messageid + "\npkg = " + pkg
                + "\ncid = " + cid);

        if (payload == null) {
            LogUtils.e(TAG, "receiver payload = null");
        } else {
            String data = new String(payload);
            LogUtils.d(TAG, "receiver payload = " + data);
        }
    }

    // cid 離線上線通知
    @Override
    public void onReceiveOnlineState(Context context, boolean b) {
        LogUtils.d(TAG, "onReceiveOnlineState=" + b);
    }

    // 各種事件處理回執(zhí)
    @Override
    public void onReceiveCommandResult(Context context, GTCmdMessage gtCmdMessage) {
        LogUtils.d(TAG, "gtCmdMessage=" + gtCmdMessage.toString());
    }

    // 通知到達(dá),只有個(gè)推通道下發(fā)的通知會(huì)回調(diào)此方法
    @Override
    public void onNotificationMessageArrived(Context context, GTNotificationMessage gtNotificationMessage) {
        LogUtils.d(TAG, "onNotificationMessageArrived=" + gtNotificationMessage.getContent().toString());
    }

    // 通知點(diǎn)擊,只有個(gè)推通道下發(fā)的通知會(huì)回調(diào)此方法
    @Override
    public void onNotificationMessageClicked(Context context, GTNotificationMessage gtNotificationMessage) {
        LogUtils.d(TAG, "onNotificationMessageClicked=" + gtNotificationMessage.getContent().toString());
    }
}

2.在 AndroidManifest.xml 中配置上述 IntentService 類(lèi),如下:

<service
    android:name="你的包名.GTIntentService"
    android:permission="android.permission.BIND_JOB_SERVICE"/>

8.設(shè)置通知圖標(biāo):

1.圖標(biāo)位置:

    |- app/
    |    |- src/
    |       |- main/
    |         |- res/
    |             |- drawable-xhdpi
    |                 |- push.png
    |                 |- push_small.png
    |             |- drawable-xxhdpi
    |                 |- push.png
    |                 |- push_small.png

push_small.png 會(huì)展示在頂部狀態(tài)欄和通知左上角位置,push_small 只能內(nèi)置, 不能修改。push.png 將會(huì)作為通知展示圖標(biāo),請(qǐng)務(wù)必確認(rèn)您放置的圖標(biāo)內(nèi)容無(wú)誤。

2.建議尺寸:

//push.png 圖片尺寸
xhdpi:   128*128
xxhdpi:  192*192

//push_small.png 圖片尺寸
xhdpi:   48*48
xxhdpi:  72*72

另外,push_small.png 設(shè)計(jì)規(guī)范有以下四個(gè)注意要點(diǎn):1. 必須是帶 Alpha 透明通道的 PNG 圖片。 2.背景必須是透明的。 3.圖形必須是白色。 4. 周?chē)灰肆暨^(guò)多的 padding。
9.添加混淆配置:
如果您的工程啟用了 Proguard 混淆,即如果在app/build.gradle的android.buildTypes.release下配置了minifyEnabled true,為了避免個(gè)推 SDK 被錯(cuò)誤混淆導(dǎo)致功能異常,需要在app/proguard-rules.pro混淆配置文件中添加如下配置:

#個(gè)推
-dontwarn com.igexin.**
-keep class com.igexin.** { *; }
10.資源精簡(jiǎn)配置:
如果您的工程啟用了資源精簡(jiǎn),即如果在 app/build.gradle 的 android.buildTypes.release 下配置了 shrinkResources true,為了避免個(gè)推 SDK 所需資源被錯(cuò)誤精簡(jiǎn)導(dǎo)致功能異常,需要在項(xiàng)目資源目錄 res/raw 中添加 keep.xml 文件,并在 keep.xml 文件中使用 tools:keep 定義哪些資源需要被保留(資源之間用“,”隔開(kāi)),如 tools:keep="@drawable/push,@drawable/push_small,...,",此處 @drawable/push、@drawable/push_small 通知圖標(biāo)的名稱(chēng)應(yīng)為您當(dāng)前放著于應(yīng)用中的圖標(biāo)名稱(chēng),如下:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@drawable/push,@drawable/push_small" />
11.初始化:

1.代碼初始化:

//分別在Application和Main中初始化一次
PushManager.getInstance().initialize(this);

2.開(kāi)啟日志:

  if (BaseConfig.Log.isDebug) {
            //切勿在 release 版本上開(kāi)啟調(diào)試日志
            PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() {

                @Override
                public void log(String s) {
                    LogUtils.i("PUSH_LOG", s);
                }
            });
        }
12.校驗(yàn)初始化:

1.過(guò)濾個(gè)推日志:GT-PUSH,如果看到 Login successed with cid = xxx 日志輸出,則說(shuō)明 SDK 初始化成功。
2.在個(gè)推后臺(tái)進(jìn)行消息推送,驗(yàn)證集成情況。

13.關(guān)于廠商通道:

經(jīng)過(guò)上面的步驟,推送基本接入完成,開(kāi)通了廠商通道的有需要設(shè)置回調(diào)地址的按照個(gè)推技術(shù)給你的文檔在各平臺(tái)填寫(xiě)對(duì)應(yīng)的回調(diào)地址,以及給個(gè)推你們的回調(diào)地址即可。

華為通道:
1.需要在華為后臺(tái)中 我的項(xiàng)目-應(yīng)用 下載 agconnect-services.json文件,放app根目錄下;
2.在app的buil.gradle中添加如下代碼:

// 在配置華為agconnect-services.json后將下面注釋打開(kāi)
apply plugin: 'com.huawei.agconnect'
個(gè)推后臺(tái)開(kāi)通了廠商通道的配置圖.png

參考文檔:

個(gè)推官方文檔 http://docs.getui.com/getui/mobile/android/androidstudio/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容