#SDK 相关

#1 添加推送 SDK 及相关配置

#1.1 添加 Maven 库地址

在以项目名为命名的顶层 build.gradle 文件中,添加 google 服务依赖和 maven 库地址,如下所示:

buildscript {
    ......

    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
        classpath 'com.google.gms:google-services:4.2.0'
    }
}

allprojects {
    repositories {
        maven{ url 'https://mvn.shalltry.com/repository/maven-public'}
        ......
    }
}

#1.2 配置依赖

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

apply plugin: 'com.google.gms.google-services'
    defaultConfig {
        ......
        manifestPlaceholders = [
                "tpush_appid" : "xxxxxx",
                "tpush_appkey": "xxxxxx"
        ]
    }
......
dependencies {
   ......
   api("com.transsion.tpush:core:1.7.0.02")
   api 'com.google.firebase:firebase-messaging:23.2.0'
}
apply plugin: 'com.google.gms.google-services'

:tpush_appid 和 tpush_appkey 在推送后台应用详情中查看

#2 编写集成代码

#2.1 初始化 SDK

在应用的 Application 初始化 SDK,如下所示

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        PushManager.getInstance().init(getApplicationContext());
        ......
    }
}

#2.2 数据透传及初始化完成监听

数据透传:可在推送平台自定义数据格式,在 App 中以广播回调的形式接收数据。

广播在 Application 中注册,如下:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // push初始化
        PushManager.getInstance().init(getApplicationContext());

        //废弃方法
        //PushManager.getInstance().registerReceiver(Context context, BroadcastReceiver broadcastReceiver)

        // 使用新方法进行初始化和透传回调注册
        PushManager.getInstance().registerPushListener(new TPushListener() {
            @Override
            public void onMessageReceive(long msgId, String transData) {

            }

            @Override
            public void onSdkInitSuccess(String clientId, String token) {

            }

            @Override
            public void onNotificationShow(long msgId, String landingPage) {

            }
        });
    }
}

onSdkInitSuccess 为初始化完成回调
onMessageReceive 为透传消息回调

:透传场景为纯 json 字符串,若业务后续通过透传发送消息,可以调用以下接口传递推送效果数据至 twibida 服务端

#PushManager.getInstance().trackShow(messageId);

为通知显示埋点接口,即:当发送的一条推送为透传消息并且是用来显示通知的,在调用 NotificationManager 的 notify 方法后,调用这个接口,如下示例:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
......
notificationManager.notify(id, notification);
PushManager.getInstance().trackShow(messageId);

#PushManager.getInstance().trackClick(messageId);

为通知点击埋点接口,即:当发送的一条推送为透传消息并且是用来显示通知的,在用户点击通知后调用这个接口

#2.3 通知样式

当前推送通知支持:系统默认通知和按钮样式。

默认通知样式支持:标题,内容,及展开文字和展开图片

默认样式案例:

默认样式-展开图片案例:

按钮通知样式支持:图标,标题,内容,按钮文字

按钮样式案例:

自定义默认样式参数

PushManager.getInstance().addCustomNotification(new PushNotification.Builder()
        .setType(PushConstants.NOTIFICATION_DEFAULT_TYPE) //必填
        .setChannelId("xxx")  //选填,端侧自定义的channel id
        .setSmallIcon(R.drawable.test_notification_small_icon)  //选填,通知小图标,端侧自定义的通知小图标
        .build());

通知小图标

该图标将会作为通知图标展示在通知栏顶部,如下所示

通知图标的建议尺寸如下:

DPI图标尺寸
ldpi18*18
mdpi24*24
hdpi36*36
xhdpi48*48
xxhdpi72*72
xxxhdpi96*96

#2.4 clientId 和 Token 获取

当业务需要通过业务自身服务器对用户进行 api 消息推送时,需要对 twibida 提供用户的 clientId 字段,该字段为用户在 twibida 端的唯一标识,可以通过以下方法获取 clientId,然后根据端侧逻辑同步至业务服务器

clientId:twibida 的用户唯一标识,可以直接用 twibida api 通过 token 下发推送给指定用户
token:firebase 的用户唯一标识,可以直接用 firebase api 通过 token 下发推送给指定用户

//异步方法
PushManager.getInstance().getClientId(new IClientIdListener() {
    @Override
    public void onFail(String msg) {
        Log.d("PUSH_", "getClientId fail:" + msg);
    }

    @Override
    public void onSuccess(String clientId) {
        Log.d("PUSH_", "getClientId success:" + clientId);
    }
});


//同步方法(可能返回null)
String token = PushManager.getInstance().getToken(context);

#2.5 主题订阅

订阅 subscribeToTopic
注:订阅需要初始化完成之后调用

PushManager.getInstance().subscribeToTopic(topic, new ITopicListener() {
    @Override
    public void onFail(String msg) {
        Log.d("PUSH_", "订阅失败:" + msg);
    }

    @Override
    public void onSuccess() {
        Log.d("PUSH_", "订阅成功");
    }
});

取消订阅 unsubscribeFromTopic

  // topic为取消订阅的主题,String类型
PushManager.getInstance().unsubscribeFromTopic(topic, new ITopicListener() {
    @Override
    public void onFail(String msg) {
        Log.d("PUSH_", "取消订阅失败:" + msg);
    }

    @Override
    public void onSuccess() {
        Log.d("PUSH_", "取消订阅成功");
    }
});

#2.6 设置测试 AppId 和 AppKey

当前推送平台支持测试模式,测试应用与正式发布的应用包名可以一样,但是 AppId 和 AppKey 不一样,具体调用方法如下:

// 判断是否为测试模式
if (isTestMode) {
    PushManager.getInstance().setAppInfo(appId, appKey);
}