手机短信验证码_云验证码-中国在线接收验证码平台
手机短信验证码_云验证码-中国在线接收验证码平台
当前位置: 首页 > 行业动态 >

今天分享使用信鸽推送踩坑的情况

时间: 2020-05-07 11:06 来源: 未知 作者: 中国在线验证码网 点击:
最近接手项目推送这一块的东西,接的信鸽推送,之前的开发在跟后台的调试时没有确定好推送消息类型,结果就出现坑了!! 一、信鸽推送的消息类型分两种: 推送通知(展现在通

最近接手项目推送这一块的东西,接的信鸽推送,之前的开发在跟后台的调试时没有确定好推送消息类型,结果就出现坑了!!

一、信鸽推送的消息类型分两种:

推送通知(展现在通知栏):

指的是在设备的通知栏展示的内容,由信鸽SDK完成所有的操作,APP可以监听通知被打开的行为,也就是说在前台下发的通知不需要APP做任何处理,默认会展示在通知栏。成功注册信鸽服务后,通常不需要任何设置便可下发通知。通常来说,结合自定义通知样式,常规的通知能够 满足大部分业务需求,如果需要更灵活的方式请考虑使用消,就是信鸽会自动显示通知栏消息,无需用户自己处理。这个推送通知会回调方法:

默认通知栏点击事件就是跳转参数里面带的Activity。如果后台不设置的话就直接重启APP了,

应用内消息命令(消息不展示到通知栏)

指的是由信鸽下发给APP的内容,需要APP继承XGPushBaseReceiver接口实现并自主处理所有操作过程,也就是说,下发的消息默认是不会展示在通知栏的,信鸽只负责将消息从信鸽服务器下发到APP这个过程,不负责消息的处理逻辑,需要APP自己实现。具体可参考Demo中MessageReceiver。

消息指的是由开发者通过前台或后台脚本下发的文本消息,信鸽只负责将消息传递给APP,APP完全自主负责消息体的处理。

消息具有灵活性强和高度定制性特点,因此更适合APP自主处理个性化业务需求,比如下发APP配置信息、自定义处理消息的存储和展示等。

例如:某游戏需要针对不同情景(用户升级提示、版本更新提示、活动营销提示等)提供不同的通知,可以把这些情景以json格式封装在消息,下发到APP,然后APP根据这些场景提供不同的提示,满足个性化需求。

<!-- APP实现的Receiver,用于接收消息和结果反馈 -->

<!-- com.tencent.android.xgpushdemo.CustomPushReceiver需要改为自己的Receiver -->

<receiver android:name="com.tencent.android.xgpushdemo.CustomPushReceiver" >

<intent-filter>

<!-- 接收消息透传 -->

<action android:name="com.tencent.android.tpush.action.PUSH_MESSAGE" />

<!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->

<action android:name="com.tencent.android.tpush.action.FEEDBACK" />

</intent-filter>

</receiver>

获取应用内消息

开发者在前台下发消息,需要APP继承XGPushBaseReceiver重载onTextMessage方法接收,成功接收后,再根据特有业务场景进行处理。

同时,XGPushBaseReceiver还提供其它相关的接口,如通知被展示、被点击的结果反馈、注册/反注册结果反馈等,请参考“XGPushBaseReceiver”章节或demo中的MessageReceiver类。

请确保在AndroidManifest.xml已经注册过该receiver,即设YOUR_PACKAGE.XGPushBaseReceiver。

public void onTextMessage(Context context,XGPushTextMessage message)

正常的话应该是在onTextMessage方法里面处理消息事件。之前的开发没有跟后台协调好,导致后台推送的都是通知消息,每次点击通知栏消息都是启动APP首页。无法灵活处理自定义通知栏。如果要改动的话后台,iOS、android三方都要改动,避免改动太大,现在就只有Android自己去规避了。

二、处理办法

1、在点击通知栏的启动首页APP的时候,在onCreate判断是否是通知栏启动的,直接finish掉。

  @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 判断是否从推送通知栏打开的

        XGPushClickedResult click = XGPushManager.onActivityStarted(this);

        if (click != null) {

            //从推送通知栏打开-Service打开Activity会重新执行Laucher流程

            //查看是不是全新打开的面板

            if (isTaskRoot()) {

                return;

            }

            //如果有面板存在则关闭当前的面板

            finish();

        }

}

2、然后监听通知栏点击事件。

    @Override

    public void onNotifactionClickedResult(Context context, XGPushClickedResult xgPushClickedResult) {

        Log.d(TAG, "onNotifactionClickedResult"+xgPushClickedResult.toString());

        String text = "";

        if (xgPushClickedResult.getActionType() == XGPushClickedResult.NOTIFACTION_CLICKED_TYPE) {

            // 通知在通知栏被点击啦。。。。。

            // APP自己处理点击的相关动作

            // 这个动作可以在activity的onResume也能监听,请看第3点相关内容

            text = "通知被打开 :";

        } else if (xgPushClickedResult.getActionType() == XGPushClickedResult.NOTIFACTION_DELETED_TYPE) {

            // 通知被清除啦。。。。

            // APP自己处理通知被清除后的相关动作

            text = "通知被清除 :";

        }

        Log.d(TAG, "onNotifactionClickedResult==" + text);

    }

    private void showNotify(String Action, XGPushShowedResult xgPushShowedResult) {

        IntentFilter filter_click = new IntentFilter();

        filter_click.addAction(Action);

        //注册广播

        registerReceiver(receiver_onclick, filter_click);

        Intent Intent_pre = new Intent(Action);

        PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, Intent_pre, 0);

        int smallIcon = R.drawable.ic_launcher;

        String ticker = "您有一条新通知";

        String title = xgPushShowedResult.getTitle();

        String content = xgPushShowedResult.getContent();

        //实例化工具类,并且调用接口

        NotifyUtil notify2 = new NotifyUtil(GlobalMsgService.this, id);

        notify2.notify_normail_moreline(pIntent, smallIcon, ticker, title, content, true, true, false);

    }

 private BroadcastReceiver receiver_onclick = new BroadcastReceiver() {

        @Override

        public void onReceive(Context context, Intent intent) {

            if (intent.getAction().equals(NOTIFICATION_HABIT_TOFORNT)) {

                Log.d("MyService", "点击通知栏");

                if (MyLifecycleHandler.isIsForeground()) {

                } else {

                     

                    }

                }

            } else if (intent.getAction().equals(NOTIFICATION_USER_CENTER)) {//跳转个人中心

            }

        }

    };

最后想说,在接入第三方SDK时还是要看清楚相应的方法避免出现这种乌龙。

------分隔线----------------------------
验证码接口