此文档单单接入推送,暂时没有用IM或其他
如果您觉得可以帮助到您,麻烦帮我点个赞.
--------------------------------
写在前面,为什么要用这个,我并不想,实际接入过程中也很多坑,搜一下几乎没有任何踩坑的博客,提交的工单回复的很官方,BTW,这可是付费的推送服务哦,居然没有技术支持的群,想要技术支持,可以,付钱吧,300块钱4个电话支持/10个实时工单,楼主由于着急,就选的电话支持,因为提了好几个工单,都没有告诉我,app没有被杀掉的情况我怎么处理,因为没有被杀掉是不会走推送通道的,人家也告诉我本地消息也不会有pushdata,那我怎么办
----------------------------------
一些坑:
1,人家的技术已经暗地里说的很明白了,安卓必须要接入厂商推送,他们自己测自己的融云推送到达率很低,跟一坨shi一样,添加引用的时候,两个都需要
implementation rootProject.ext.dependencies["im-lib"]
implementation rootProject.ext.dependencies["im-kit"]
2,推送只有在app被杀掉的情况才会有,推送接受的地方,写的很好哈, 返回 false, 会走融云 SDK 默认处理逻辑,说什么sdk会帮你弹出通知,亲测,一次都没看看到过
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.blankj.utilcode.util.LogUtils;
import com.huawei.hms.support.api.entity.core.CommonCode;
import com.zgzx.metaphysics.ui.activities.SplashActivity;
import io.rong.push.PushType;
import io.rong.push.notification.PushMessageReceiver;
import io.rong.push.notification.PushNotificationMessage;
public class SealNotificationReceiver extends PushMessageReceiver {
@Override
public boolean onNotificationMessageArrived(Context context, PushType pushType,
PushNotificationMessage pushMsg) {
//不落地推送
//
return true; // 返回 false, 会弹出融云 SDK 默认通知; 返回 true, 融云 SDK 不会弹通知, 通知需要由您自定义。
}
@Override
public boolean onNotificationMessageClicked(Context context, PushType pushType,
PushNotificationMessage pushNotificationMessage) {
//小米手机点击通知栏的方式
Intent intent = new Intent(context, SplashActivity.class);
Bundle bundle = new Bundle();
bundle.putString("appData", pushNotificationMessage.getPushData());
intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
LogUtils.aTag("PUSH-receiver", pushNotificationMessage);
return true;
// return false; // 返回 false, 会走融云 SDK 默认处理逻辑, 即点击该通知会打开会话列表或会话界面; 返回 true, 则由您自定义处理逻辑。
}
/**
* 第三方push状态回调
*
* @param pushType push类型
* @param action 当前的操作,连接或者获取token
* @param resultCode 返回的错误码
*/
public static boolean needUpdate = false;
@Override
public void onThirdPartyPushState(PushType pushType, String action, long resultCode) {
super.onThirdPartyPushState(pushType, action, resultCode);
if (pushType.equals(PushType.HUAWEI)) {
if (resultCode == CommonCode.ErrorCode.CLIENT_API_INVALID) {
//设置标记位,引导用户升级
needUpdate = true;
}
}
}
}
3,app活跃的时候怎么办? 不好意思,不走推送,走本地通知,就是 收本地消息的地方,init之后使用
RongIMClient.setOnReceiveMessageListener(new MyReceiveMessageListener())
然后呢,让后台把push内容放到content里面,app端收到之后,当作自定义消息来解析出来,
神奇的是当你按照文档来做的时候可能解析不成功,还是unknowmessage: https://docs.rongcloud.cn/im/imkit/android/conversation/custom_message/
👇文档写法
RongIM.registerMessageType(CustomizeMessage.class);
RongIM.getInstance().registerMessageTemplate(new CustomizeMessageItemProvider);
无奈尝试
try {
RongIMClient.registerMessageType(CustoizeMessage.class);
} catch (AnnotationNotFoundException e) {
e.printStackTrace();
}
RongIM.registerMessageTemplate(new CustomizeMessageItemProvider());
这样就行了
还要注意在清单文件里粘贴文档里的其他厂商需要的service或者receiver的时候⚠️报错,可能是厂商的推送jar/aar更新了,文档没有更新,需要自行手动修改