进阶

打开 URI 并传参

使用消息推送功能通过通知栏打开页面 URI 或是网页 URI 时,组件内部将按照系统默认的方式展示 URI 内容。当需要使用其它方式打开 URI 时(如:自定义webview),实现该接口,并传入接口实现类,则可实现自定义 URI 打开方式。

接口定义

public abstract class TMFPushIntentCreator {
    /**
     * 返回跳转打开uri的intent
     * @param context 打开页面使用的上下文
     * @param type 跳转类型,参考EJumpType定义: 1-APP跳转,2-Url跳转,3-跳转应用内页,4-不跳转
     * @param uri 要打开的uri
     * @param jsonExtras json格式的附加参数
     * @return 需要打开的uri的Intent
     */
    public Intent createIntent(Context context, int type, String uri, String jsonExtras) {
        return null;
    }
}

参数说明

参数名称 参数类型 参数描述 必选
context Context 供使用的上下文 Y
type int 跳转类型,参考EJumpType定义: 1-APP跳转,2-Url跳转,3-跳转应用内页,4-不跳转 Y
uri String 需要打开的 URI Y
extra String 附加参数 Y

Sample

//传入打开uri的intent,不传则打开默认浏览器
PushCenter.setPushIntentCreator(new OpenUrlForPushImpl());
public class OpenUrlForPushImpl extends TMFPushIntentCreator {
    @Override
    public Intent createIntent(Context context, int type, String uri, String jsonExtras) {
        if (type == EJumpType._EJT_URL && !TextUtils.isEmpty(uri)) {
            Intent intent = new Intent(context, JSapiActivity.class);
            intent.putExtra(JSapiActivity.PAGE_TYPE, JSapiActivity.WEB_PAGE);
            intent.putExtra(JSapiActivity.PAGE_URL, uri);
            return intent;
        }
        return null;
    }
}

实现自定义通知栏

对于通知栏消息的展示,push 组件提供通知栏默认样式,即展示默认 app icon,标题,内容。默认通知栏的展示图标可通过在 mipmap 文件夹下,放置资源图片进行修改。通知栏小图标命名为 ic_notification_small,大图标命名为 ic_notification_large,当 mipmap 文件夹中,放置了对应命名的资源文件时,组件内部将获取资源用于默认通知栏样式展示。(请在对应文件夹下放置对应分辨率的图片)。

push_icon

组件提供自定义通知栏样式接口。当需要自定义通知栏样式时,则需实现 ICustomNotificationForPush 接口并将其实现类传入 push 组件。同时,由于通知栏事件由外部处理,组件无法处理事件上报,故提供通知栏事件上报接口,由外部调用上报。

push_icon注意 :接入华为小米等厂商推送 SDK 时,通知栏消息的样式由手机厂商控制,该自定义通知栏样式接口只在自有通道展示。

接口定义

public interface ICustomNotificationForPush {
    /**
     * 调用自定义通知栏的展示
     * @param tmfPushMessage
     * @return 自定义展示通知栏成功返回true,失败返回false
     */
    public boolean showCustomNotification(TMFPushMessage tmfPushMessage);
}

方法参数

请参见 TMFPushMessage(通知栏消息数据结构)

Sample

PushCenter.setCustomNotification(new CustomNotificationForPushImpl());//可选,非厂商push时通知栏自定义样式的实现
public class CustomNotificationForPushImpl implements ICustomNotificationForPush {

    @Override
    public void showCustomNotification(TMFPushMessage tmfPushMessage) {
      //展示自定义的通知栏
      CustomNCFactory.getInstance()
        .showPushNotification(ContextHolder.sContext,tmfPushMessage);
    }
}

实现通知栏事件上报接口-自定义通知栏时使用

自定义通知栏样式时,通知栏事件的上报须由调用方发起上报,故提供上报接口如下。

接口定义

public interface ICustomNCReporter {

    public static final int NC_EVENT_SHOW = EPushPhase.EPP_Show;//通知栏展示
    public static final int NC_EVENT_CLICK = EPushPhase.EPP_Click;//通知栏点击
    public static final int NC_EVENT_CLEAR = EPushPhase.EPP_Clear;//用户主动清除通知栏
    public static final int NC_EVENT_APP_CANCEL = EPushPhase.EPP_Cancel;//App内部清除通知栏

    /**
     * 上报通知栏事件
     * @param tmfPushMessage 通知栏消息体
     * @param event 通知栏事件
     */
    public void reportNCEvent(TMFPushMessage tmfPushMessage, int event);
}

参数说明

参数名称 参数类型 参数描述 必选
tmfPushMessage TmfPushMessage 通知栏消息数据体 Y
Event int 通知栏事件 int 值 Y

Sample

//上报通知栏事件-展示
PushCenter.getCustomNCReporter().reportNCEvent(tmfPushMessage, ICustomNCReporter.NC_EVENT_SHOW);

条件推送设置

账号推送

通过控制台推送消息时,可以指定按用户账号推送,当需要使用此功能时,需要在客户端调用接口setUserId(String userId)设置 userId,该接口按传值判断绑定/解绑,传入空串即为解绑操作。

接口定义

/**
 * 设置UserId
 * @param userId
 */
public static void setUserId(String userId) {}

Sample

//设置userId的接口示例,用于按用户标识做消息推送,实际使用场景为获取到userId后进行上报
ProfileManager.setUserId("custom_userid_1");

// userId解绑示例
ProfileManager.setUserId("");

地区推送

通过控制台推送消息时,可以指定按地区推送,当需要使用此功能时,需要在客户端调用地理位置上报接口,将客户端地区信息同步到云端。

接口定义

/**
 * 地理位置上报(按地区推送)
 * @param country 国家
 * @param province 省
 * @param city 市
 */
 public static void setLocation(String country,String province,String city){}

push_icon说明:ProfileLocationReporter 为 TMFDemo 中封装好的定位后将结果上报到 TMF 后台的接口,可直接复制相应代码进行使用。

自定义标签推送

通过 ProfileManager.setTag() 接口进行自定义标签的上报,tag 格式为 key-value 格式。同样,当需要做标签解绑操作时,则上报 value 为空串表示解绑。自定义标签使用前,需事先在TMF后台添加相关配置,功能入口:“数据同步->标签管理”,详细使用方法可参见数据同步 > 使用控制台

接口定义

 /**
  * 设置单个标签
  * 如果标签key已设置过,则直接覆盖其value
  * @param tag
  * @param value
  */
  public static void setTag(String tag, String value){}

 /**
  * 设置多个标签
  * @param tags
  */
  public static void setTags(Map<String, String> tags){

Sample

//设置自定义标签示例
ProfileManager.setTag("tag1","tag1_value1");

// 自定义标签删除示例,value为空即删除
ProfileManager.setTag("tag1","");

上报失败的标签将通过 ITagErrorListener 接口进行回调,该接口将返回上报失败的 tag 及其失败原因对应的错误码,通过 ProfileManager.setTagErrorListener()设置回调接口。

push_icon注意:需先设置回调接口再进行上报,即 setTagErrorListener() 的调用时机需在调用 setTag() 之前。若不关注 tag 上报是否失败,也可不设置该回调接口。

接口定义

/**
 * 设置自定义Tag的错误回调
 */
public interface ITagErrorListener {
    //错误回调
    public void onError(List<TagResult> tagResultList);

    /**
    * Tag结果结构体,包括Tag的key-value及其错误码
    */
    public class TagResult{
        public String mTagKey;
        public String mTagValue;
        public int mErrorCode;

        public TagResult(String tagKey,String tagValue,int errorCode){
            mTagKey = tagKey;
            mTagValue = tagValue;
            mErrorCode = errorCode;
        }
    }
}

Sample

// 自定义标签设置错误回调接收示例
ProfileManager.setTagErrorListener(new ITagErrorListener() {//全局自定义标签错误监听器
    @Override
    public void onError(List<TagResult> tagResultList) {
        if (tagResultList != null && tagResultList.size() > 0){
            for (TagResult tagResult : tagResultList){
                Log.i("TMF_Profile", "tagKey=" + tagResult.mTagKey + ",tagValue=" + tagResult.mTagValue + ",errorCode=" + tagResult.mErrorCode);
            }
        }
    }
});

错误码定义

错误码 说明
-1004 上报标签不可用。标签无效或未配置,需检查配置
-1005 上报标签值不在配置范围内
-1006 上报标签值过长,需要小于128字节

自定义标签快速上报结果回调接口

该接口直接调用 shark 上报自定义标签,无错误重试逻辑,只透传设置结果。

接口定义

/**
 * 快速上报单个tag并回调该tag的设置结果
 * 本接口用于快速上报tag并获取tag设置结果,与其它tag的接口逻辑区分处理,只透传上报结果,组件内部不会做失败重试
 * 注:本接口与setTag接口互斥,即设置某个tag只能二者选其一使用,不能先后分别调用两个接口
 *      原因举例:setTag接口上报速度较慢,先调用原接口设置某tag值为A,后调用本接口设置值为B时,
 *              由于本接口设置速度较快,可能存在值B设置成功后才设置为值A的情况
 * @param tagKey
 * @param tagValue
 * @param iSetTagCallback
 */
public static void setTagWithCallback(String tagKey, String tagValue, ISetTagCallback iSetTagCallback);

/**
 * 单个tag设置结果回调
 */
public interface ISetTagCallback {

    /**
     * 设置tag的结果回调
     * @param resultCode 结果码,详见TagErrorCode
     */
    public void onResult(int resultCode);

}

错误码定义

public class TagErrorCode {
    public static final int ERR_NONE = ECTRE_Success;//无错误,即上报成功
    public static final int ERR_TagNullError = -998;//设置了tag中存在key/value为null的错误
    public static final int ERR_NetworkError = -999;//网络错误,即当前无网络
    public static final int ERR_ServerError = ECTRE_ServerError;//服务端发生错误
    public static final int ERR_SDKInnerError = ECTRE_ActionError;//SDK内部发生错误

    //云端返回上报标签不符合要求的具体错误码
    public static final int ERR_ReportTagNotAvai = ECTRE_ReportTagNotAvai;//上报标签不可用。标签无效或未配置,需检查配置
    public static final int ERR_ReportTagValueNotAvai = ECTRE_ReportTagValueNotAvai;//上报标签值不在配置范围内
    public static final int ERR_ReportTagValueTooLong = ECTRE_ReportTagValueTooLong;//上报标签值过长,需要小于128字节
}

Sample

// 自定义标签快速上报及回调接口示例,建议不与setTag接口混合使用
ProfileManager.setTagWithCallback("tag2", "tag2_value1", new ISetTagCallback() {
    @Override
    public void onResult(int resultCode) {
        Log.i("TMF_Profile","resultCode = "+resultCode);
    }
});
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""