首页 » 谷歌 » 即时通信IM推荐您使用各厂商提供的系统级推送通道

即时通信IM推荐您使用各厂商提供的系统级推送通道

 

谷歌锁区号/谷歌邮箱老号-购买商城
谷歌play地区代改
Google Voice号码支持自助购买
谷歌锁区号购买商城]
美区VISA卡代开-可以用于aws,azure,FB,谷歌,亚马逊,速卖通,eBay,独立站,paypal等支付
如果您还有其他问题可以加我QQ交流。
QQ号:2802364971

本页内容:

概览

即时通讯 IM 的最终用户需要能够随时了解最新消息。由于移动设备的性能和功率有限,当App在后台时,为避免保持长连接造成资源消耗过大,即时通讯IM建议您使用各家提供的系统级推送通道消息通知的制造商。与第三方推送相比,系统级推送通道拥有更稳定的系统级长连接,可以随时接受推送消息,资源消耗大大降低。

注意:

通过离线推送功能运行

按照以下步骤访问离线推送功能,文档中有源代码链接供参考。

第一步:将应用注册到厂商推送平台

离线推送功能依赖于厂商的原始渠道。您需要将您的应用程序注册到各个厂商的推送平台,以获取 AppID 和 .目前国内支持的手机厂商有:小米、华为、VIVO,海外支持FCM。

第 2 步:IM 控制台配置

登录腾讯云即时通讯IM控制台,添加各厂商的推送证书,并将步骤1中获取的各厂商的AppId、 等参数配置到IM控制台的推送证书中,其中“点击下一步操作”请参阅第 3 步。

厂商推送平台IM控制台配置

厂商推送平台IM控制台配置

注意:ID对应AppID,对应

厂商推送平台IM控制台配置

厂商推送平台IM控制台配置

厂商推送平台IM控制台配置

厂商推送平台IM控制台配置

注意

对于小米厂商,如果在厂商开发者官网配置,需要在即时通讯IM控制台上进行配置谷歌账号在线购买,否则可能无法推送成功。

第三步:配置离线推送跳转接口

收到离线推送后,通知栏会显示推送信息如图。点击通知栏会打开应用,进入配置跳转界面。请参考以下步骤配置点击通知消息后的跳转。

第 4 步:配置供应商推送规则



<permission
    android:name="xxxx.permission.MIPUSH_RECEIVE"
    android:protectionLevel="signature" />
uses-permission android:name="xxxx.permission.MIPUSH_RECEIVE" />

<service
    android:name="com.xiaomi.push.service.XMPushService"
    android:enabled="true"
    android:process=":pushservice" />
<service
    android:name="com.xiaomi.push.service.XMJobService"
    android:enabled="true"
    android:exported="false"
    android:permission="android.permission.BIND_JOB_SERVICE"
    android:process=":pushservice" />

<service
    android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
    android:enabled="true"
    android:exported="true" />
<service
    android:name="com.xiaomi.mipush.sdk.MessageHandleService"
    android:enabled="true" />

<receiver
    android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>
<receiver
    android:name="com.xiaomi.push.service.receivers.PingReceiver"
    android:exported="false"
    android:process=":pushservice">
    <intent-filter>
        <action android:name="com.xiaomi.push.PING_TIMER" />
    </intent-filter>
</receiver>

<receiver
    android:name="xxxx.XiaomiMsgReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.xiaomi.mipush.ERROR" />
    </intent-filter>
</receiver>



<permission
    android:name="xxxx.permission.PROCESS_PUSH_MSG"
    android:protectionLevel="signatureOrSystem" />
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
<uses-permission android:name="xxxx.permission.PROCESS_PUSH_MSG" />

<service
    android:name="xxxx.HUAWEIHmsMessageService"
    android:exported="false">
    <intent-filter>
         <action android:name="com.huawei.push.action.MESSAGING_EVENT"/>
    </intent-filter>
</service>
    


<uses-permission android:name="com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE" />
<uses-permission android:name="com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE" />

<service
    android:name="com.heytap.msp.push.service.CompatibleDataMessageCallbackService"
    android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE">
    <intent-filter>
        <action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" />
    </intent-filter>
</service>

<service
    android:name="com.heytap.msp.push.service.DataMessageCallbackService"
    android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE">
    <intent-filter>
        <action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE" />
        <action android:name="com.heytap.msp.push.RECEIVE_MCS_MESSAGE" />
    </intent-filter>
</service>


<service
    android:name="com.vivo.push.sdk.service.CommandClientService"
    android:exported="true" />
<activity
    android:name="com.vivo.push.sdk.LinkProxyClientActivity"
    android:exported="false"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<receiver android:name="xxxx.VIVOPushMessageReceiverImpl">
    <intent-filter>
        
        <action android:name="com.vivo.pushclient.action.RECEIVE" />
    </intent-filter>
</receiver>


 
 <permission
     android:name="xxxx.permission.C2D_MESSAGE"
     android:protectionLevel="signature" />
 <uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
 <uses-permission android:name="xxxx.permission.C2D_MESSAGE" />

<receiver android:name="xxxx.MEIZUPushReceiver">
     <intent-filter>
         
         <action android:name="com.meizu.flyme.push.intent.MESSAGE" />
         
         <action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />
         
         <action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />
         
         <action android:name="com.meizu.c2dm.intent.REGISTRATION" />
         <action android:name="com.meizu.c2dm.intent.RECEIVE" />
         <category android:name="com.tencent.qcloud.tim.demo.thirdpush" />
     </intent-filter>
 </receiver>
 

体内适应

根据vivo厂商的访问指南,需要在文件中添加APPID和APPID,否则会出现编译问题:

android {
    ...
    defaultConfig {
            ...
        manifestPlaceholders = [
                "VIVO_APPKEY" : "您应用分配的证书 APPKEY",
                "VIVO_APPID" : "您应用分配的证书 APPID"
        ]
    }
}

<receiver android:name="com.tencent.qcloud.tim.demo.thirdpush.VIVOPushMessageReceiverImpl">
    <intent-filter>
        
        <action android:name="com.vivo.pushclient.action.RECEIVE" />
    </intent-filter>
</receiver>
<meta-data tools:replace="android:value"
    android:name="com.vivo.push.api_key"
    android:value="您应用分配的证书 APPKEY" />
<meta-data tools:replace="android:value"
    android:name="com.vivo.push.app_id"
    android:value="您应用分配的证书 APPID" />

华为与FCM适配

华为和FCM需要按照厂商的方法集成对应的json配置文件。

将下载配置文件添加到项目根目录。

华为FCM

在项目级build.file的->下添加如下配置:

classpath 'com.google.gms:google-services:4.2.0'
classpath 'com.huawei.agconnect:agcp:1.4.1.300'

在项目级build.file的->下添加如下配置:

mavenCentral()
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}

添加后的效果如下:

repositories {
    ...
     // 配置HMS Core SDK的Maven仓地址。
     maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
    ...
    classpath 'com.google.gms:google-services:4.2.0'
    classpath 'com.huawei.agconnect:agcp:1.4.1.300'
}

将以下配置添加到应用级构建。文件。

apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.huawei.agconnect'

点击项目右上角的立即同步,同步项目。

Step 5:集成 push 6:同步前后端状态

如果您的应用返回后台,需要在收到新消息时显示在手机通知栏,请调用IMSDK接口将应用状态同步到IM后台;当应用返回前台时,请调用 IMSDK 的接口将应用的状态同步到 IM 后台。建议您参考e的e()相关逻辑来监控app前后端切换的解决方案。

// 应用切到后台时
V2TIMManager.getOfflinePushManager().doBackground(totalCount, new V2TIMCallback() {
    @Override
    public void onError(int code, String desc) {
        DemoLog.e(TAG, "doBackground err = " + code + ", desc = " + desc);
    }
    @Override
    public void onSuccess() {
        DemoLog.i(TAG, "doBackground success");
    }
});
// 应用切回前台时
V2TIMManager.getOfflinePushManager().doForeground(new V2TIMCallback() {
    @Override
    public void onError(int code, String desc) {
        DemoLog.e(TAG, "doForeground err = " + code + ", desc = " + desc);
    }
    @Override
    public void onSuccess() {
        DemoLog.i(TAG, "doForeground success");
    }
});

第七步:发送消息时设置离线推送参数

在调用发送消息时,可以通过设置离线推送参数,可以参考下面的()方法:

OfflineMessageContainerBean containerBean = new OfflineMessageContainerBean();
OfflineMessageBean entity = new OfflineMessageBean();
entity.content = message.getExtra().toString();
entity.sender = message.getFromUser();
entity.nickname = chatInfo.getChatName();
entity.faceUrl = TUIChatConfigs.getConfigs().getGeneralConfig().getUserFaceUrl();
containerBean.entity = entity;
V2TIMOfflinePushInfo v2TIMOfflinePushInfo = new V2TIMOfflinePushInfo();
v2TIMOfflinePushInfo.setExt(new Gson().toJson(containerBean).getBytes());
// OPPO必须设置ChannelID才可以收到推送消息,这个channelID需要和控制台一致
v2TIMOfflinePushInfo.setAndroidOPPOChannelID("tuikit");
final V2TIMMessage v2TIMMessage = message.getTimMessage();
String msgID = V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, isGroup ? null : userID, isGroup ? groupID : null,
    V2TIMMessage.V2TIM_PRIORITY_DEFAULT, false, v2TIMOfflinePushInfo, new V2TIMSendCallback() {
        @Override
        public void onProgress(int progress) {
        }
        @Override
        public void onError(int code, String desc) {
            TUIChatUtils.callbackOnError(callBack, TAG, code, desc);
        }
        @Override
        public void onSuccess(V2TIMMessage v2TIMMessage) {
            TUIChatLog.v(TAG, "sendMessage onSuccess:" + v2TIMMessage.getMsgID());
            message.setMsgTime(v2TIMMessage.getTimestamp());
            TUIChatUtils.callbackOnSuccess(callBack, message);
        }
    });

第 8 步:解析离线推送消息

收到离线推送的通知栏消息后,点击会自动跳转到你配置的跳转界面。可以在接口启动的()方法中调用().()获取透传的离线推送参数,然后自定义跳转。详情请参考()方法。

private void handleOfflinePush() {
    // 根据登录状态,判断是否需要重新登录 IM
    // 1. 如果登录状态为 V2TIMManager.V2TIM_STATUS_LOGOUT,跳转到登录界面,重新登录 IM
    if (V2TIMManager.getInstance().getLoginStatus() == V2TIMManager.V2TIM_STATUS_LOGOUT) {
        Intent intent = new Intent(MainActivity.this, SplashActivity.class);
        if (getIntent() != null) {
            intent.putExtras(getIntent());
        }
        startActivity(intent);
        finish();
        return;
    }
    // 2. 否则,说明 App 只是处于退后台的状态,直接解析离线推送参数
    final OfflineMessageBean bean = OfflineMessageDispatcher.parseOfflineMessage(getIntent());
        if (bean != null) {
            setIntent(null);
            NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            if (manager != null) {
                manager.cancelAll();
            }
            if (bean.action == OfflineMessageBean.REDIRECT_ACTION_CHAT) {
                if (TextUtils.isEmpty(bean.sender)) {
                    return;
                }
                TUIUtils.startChat(bean.sender, bean.nickname, bean.chatType);
            }
        }
}

注意:

以上完成后,当你的应用返回后台或进程被杀时,离线推送通知栏会显示消息。可以点击通知栏跳转到设置的应用界面,完成离线推送功能。

FAQ 如何自定义离线推送的推送声音?

从SDK6.1.2155开始,支持设置自定义铃声,支持华为、小米、FCM、APNS。方法见:接口和.

收不到离线推送如何解决? 1、OPPO手机

OPPO手机一般在以下情况下不会收到推送通知:

2、作为自定义消息发送消息

自定义消息的离线推送不同于普通消息。我们无法解析自定义消息的内容,也无法确定推送的内容,所以默认不推送。如果您有推送需求,则需要在现场设置字段。 ,推送时默认显示desc信息。

3、设备通知栏设置影响

离线推送的直观表现是通知栏提示,所以它和其他通知一样受设备通知设置的影响。以华为为例:

4、按照流程完成访问谷歌账号在线购买,但还是收不到离线推送,跳转到界面,如何排查?

点击离线推送消息的通知栏,跳转到指定界面。原理是后台根据控制台中配置的各个厂商的跳转方式和接口参数,将厂商的接口规则传递给厂商的服务器。点击相应界面开始跳转时。对应的界面启动也依赖于文件的配置,必须对应配置才能正确启动和跳转。

1、首先需要重点检查和文件的相关配置是否对应正确。可以参考配置。请注意,某些制造商提供接口的方式有所不同。

2、如果跳转到配置界面,需要检查配置界面下的离线报文解析和接口重定向是否正常。

制造商推送限制

1、国内厂商有消息分类机制,不同类型会有不同的推送策略。如果想要推送及时可靠,需要根据厂商的规定,将自己应用的推送类型设置为高优先级的系统消息类型或者重要的消息类型。相反,线下推送消息会受到厂商推送消息分类的影响,可能与预期不同。

2、另外,一些厂商对每天可以推送的应用数量也有限制。

如果离线推送消息没有及时推送或者偶尔收不到,需要考虑以下几点:

vivo:将推送消息分为系统消息和操作消息,具有不同的推送效果和策略。系统消息类型也会经过制造商智能分类的二次修正。如果智能分类识别它不是系统消息,它将自动更正为操作消息。如有误判,可通过邮件申请反馈。此外,消息推送还受到每日推送总数的限制,这取决于厂商的应用订阅数量。

详情请参阅供应商说明 1 或供应商说明 2。 OPPO:将推送消息分为私信和公信,有不同的推送效果和策略。其中,私信是针对用户有一定关注度并希望及时收到的信息。私信渠道权益需通过邮箱申请。公共频道推送次数有限。

查看或了解详情。小米:推送消息分为重要消息和普通消息,推送效果和策略不同。其中,重要消息类型只允许8种消息推送:即时消息、个人关注动态提醒、个人事件提醒、个人订单状态变化、个人财务提醒、个人状态变化、个人资源变化、个人设备提醒。可以在制造商的控制台上推送。申请打开。常见消息类型的推送次数是有限制的。

详情请参阅供应商说明 1 或供应商说明 2。魅族:推送消息数量有限。

详情请参阅制造商的说明。 FCM:推送上游消息的频率是有限的。

谷歌锁区号/谷歌邮箱老号-购买商城
谷歌play地区代改
Google Voice号码支持自助购买
谷歌锁区号购买商城]
美区VISA卡代开-可以用于aws,azure,FB,谷歌,亚马逊,速卖通,eBay,独立站,paypal等支付
如果您还有其他问题可以加我QQ交流。
QQ号:2802364971

原文链接:即时通信IM推荐您使用各厂商提供的系统级推送通道,转载请注明来源!

0