编程知识 cdmana.com

Le fournisseur Android pousse le conflit... Page H5 intégrée à l'extrémité mobile

C'estMiPushReceiverSi nous regardons le code source, nous verrons qu'il traite et transmet principalement les événements poussés par le fabricant de millet,MiPushReceiverC'est aussi hérité de milletpush sdkDansPushMessageReceiver,MiPushReceiverLes codes sont les suivants::AndroidConflit de poussée du fabricant..,Intégration mobileh5Page_Programmeur

Les documents officiels disent que vous pouvez commencer à tester les messages Push,Alors il a tué le processus du téléphone,Envoyer un message au téléphone,Je peux vraiment recevoir.Mais le processus a été tué et a reçu une poussée Aurora normale,Et maintenant il n'y a plus de,Certains modèles d'autres fabricants peuvent recevoir,Mais cliquer sur le message Push ne s'ouvre pasApp,Regardons le graphique ci - dessous pour analyser la cause:

AndroidConflit de poussée du fabricant..,Intégration mobileh5Page_Programmeur_02

Qu'il s'agisse d'Aurora ou de yunxin,Tout d'abord, ils pousseront le message vers le service Push Cloud de millet,Ensuite, le système de téléphone cellulaire de millet maintiendra un lien long avec le service Cloud Push de milletMiPush SDKAprès réception,On trouvera d'abord l'héritagePushMessageReceiver?Et s'inscrire àManifestDeReceiver, Et envoyer le message à ceci Receiver Parce que Aurora et yunxin sont ManifestTout est enregistréPushMessageReceiver, Il y a donc une incertitude quant à savoir qui peut recevoir .Si configurépriority Priorité, La priorité élevée recevra . De retour en haut, nous avons remarqué que Netease Cloud letter MiPushReceiverPriorité établie, Pour expliquer pourquoi les nouvelles de l'aurore n'ont pas été reçues , Je me suis précipité pour vérifier mes bagages Manifest De l'aurore moyenne PluginXiaomiPlatformsReceiver Comme suit:

<receiver

android:name=“cn.jpush.android.service.PluginXiaomiPlatformsReceiver”

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>

Vraiment?, Aurora n'a pas de priorité , Cela peut expliquer pourquoi Aurora Push n'a pas pu être reçu après Netease Cloud Credit Access Factory Push . En raison de la façon dont les différents fournisseurs accèdent à la poussée du fournisseur est différent , La performance de ce conflit n'est pas non plus la même , Les messages comme le message Cloud du téléphone de xiaomi ont toujours préséance sur le message d'Aurora ,oppo、vivo Tous les messages sont affichés, mais aucun message n'est affiché en cliquant sur la barre de notification ( Le message n'a pas été transmis à la Receiver), Et certains des téléphones de Huawei peuvent distinguer .** Bref, deux Receiver En même temps, pour recevoir la poussée du fabricant , Il y aura des situations conflictuelles .** Ensuite, nous continuons à chercher des solutions à ce conflit dans la documentation intégrée de Netease Cloud et Aurora , Enfin, nous l'avons trouvé derrière le document de Netease Cloud letter , Puis nous avons eu un deuxième problème. .

 Deuxième question

Le document Push de Netease Cloud letter fournit le traitement de la compatibilité Push de millet , Cloud letter offre MiPushMessageReceiver , Permet à d'autres d'accéder à la logique Push - forward du fabricant et de la gérer ReceiverHériter de çaMiPushMessageReceiver, La logique correspondante est ensuite traitée dans la méthode de rappel correspondante ,MiPushMessageReceiverComme suit:

public?class?MiPushMessageReceiver?extends?BroadcastReceiver{

@Override

public?final?void?onReceive(Context?context,?Intent?intent)?{}

public?void?onReceivePassThroughMessage(Context?context,?MiPushMessage?message)?{}

public?void?onNotificationMessageClicked(Context?context,?MiPushMessage?message)?{}

public?void?onNotificationMessageArrived(Context?context,?MiPushMessage?message)?{}

public?void?onReceiveRegisterResult(Context?context,?MiPushCommandMessage?message)?{}

public?void?onCommandResult(Context?context,?MiPushCommandMessage?message)?{}

}

Et ensuite mettre le sienReceiverAjouter àManifestMoyenne, Pas de réglage priorityPriorité:

<receiver?android:name=“xxx.YourSelfReceiver”>

<intent-filter>

<action?android:name=“com.xiaomi.mipush.RECEIVE_MESSAGE”/>

<action?android:name=“com.xiaomi.mipush.MESSAGE_ARRIVED”/>

<action?android:name=“com.xiaomi.mipush.ERROR”/>

</intent-filter>

</receiver>

Cela garantit que le Push est envoyé par Netease Cloud MiPushReceiver Reçu en premier , Et puis en jugeant si c'est son propre message Push , C'est le sien. , Celui qui n'est pas le sien est hérité de MiPushMessageReceiverDeReceiverTraitement, Voir le code source de Netease Cloud letter est vraiment comme ça :

public?final?class?MiPushReceiver?extends?PushMessageReceiver?{

public?MiPushReceiver()?{}

public?final?void?onNotificationMessageClicked(Context?var1,?MiPushMessage?var2)?{

if?(g.a(var2.getExtra()))?{

c.a(5).onNotificationClick(var1,?var2);?//Je m'en occupe moi - même.

}?else?{

MiPushMessageReceiver?var3;

if?((var3?=?a.a(var1))?!=?null)?{

var3.onNotificationMessageClicked(var1,?var2);//À vous.MiPushMessageReceiverTraitement

}

}

}

}

Si vous suivez la méthode recommandée par Cloud letter , C'est le processus après le traitement :AndroidConflit de poussée du fabricant..,Intégration mobileh5Page_Programmeur_03

La façon et le principe de la manipulation ont été clarifiés ici , Tout ce qu'on a à faire, c'est pousser l'aurore. PluginXiaomiPlatformsReceiverRemplacer par héritageMiPushMessageReceiver, Puis ajoutez - le à ManifestJuste au milieu,Ça a l'air simple, Ensuite, nous reviendrons à Aurora PluginXiaomiPlatformsReceiver:AndroidConflit de poussée du fabricant..,Intégration mobileh5Page_Programmeur_04

Euh...… Alors la question se pose, Cette classe est enveloppée dans Aurora Push arrDans,** Comment modifier un bon arr Et l'héritage des classes dans le paquet ?** Ce problème ne semble pas très facile à résoudre ~

##? ?Résoudre le problème

  Demandez de l'aide à yunxin et Aurora

La première chose à laquelle je pense, c'est que ce système de gestion des conflits Push des fournisseurs d'écoute est fourni par Cloud , Demandez d'abord si la technologie Cloud letter a une solution , La réponse donnée par yunxin est la suivante :AndroidConflit de poussée du fabricant..,Intégration mobileh5Page_Programmeur_05

Yunxin veut dire , Ils n'offrent que ce système compatible d'héritage , Si c'est un paquet tiers , Ils n'ont pas non plus de bons moyens , Et nous a recommandé de trouver un technicien Aurora , Négocier la séparation des classes correspondantes , La première pensée est que si Aurora peut fournir le code source , Si seulement on modifiait la relation d'héritage , Alors il s'est précipité à la recherche de la technologie Aurora pour communiquer :AndroidConflit de poussée du fabricant..,Intégration mobileh5Page_Développement mobile_06

La technologie d'Aurora signifie qu'elle n'offre qu'une version d'emballage uniforme , L'accès simultané avec d'autres tiers n'est pas non plus envisagé SDK Problèmes de conflit qui en résultent , Et il est recommandé que nous n'intégrions qu'un seul canal fournisseur …Volontiers.! L'homme de yunxin nous a demandé de consulter Aurora , Non seulement Aurora n'a pas fourni de solution , Et n'intégrons pas plusieurs canaux de fournisseurs . Ne pas intégrer ne répond certainement pas aux besoins de l'entreprise . Mais aussi compréhensible , Différents tiers devraient également considérer l'accès au canal du fournisseur comme prioritaire pour eux - mêmes , Si cela affectera d'autres tiers , Comment d'autres tiers ont - ils mis en oeuvre ,Comment rendre compatible, Ils ne peuvent pas s'occuper autant , Mais comme Cloud letter offre également des solutions compatibles , C'est pas mal ! J'ai trouvé l'aurore SDK Confus. , Il est donc normal de ne pas fournir le code source . Il ne semble pas y avoir d'aurore PluginXiaomiPlatformsReceiver Source de, Ni yunxin ni Aurora ne peuvent vous aider , Le problème ne peut être résolu que par nous - mêmes .

  Analyse du principe du problème ,Trouver une solution

  • Action analytique

Regarde en arrière et réfléchis PluginXiaomiPlatformsReceiver Rôle de la classe, À Aurora SDKMoyenne, Cette classe hérite de la PushMessageReceiver , Puis il a été ajouté à ManifestDans le document, Il y a donc un système de surveillance de la poussée du millet 、 Et envoyer un message à Aurora SDK Capacité de traitement ,En même tempsPluginXiaomiPlatformsReceiver La classe n'a pas été appelée ailleurs .

  • Et utiliser l'héritage ?

Puisque nous ne pouvons pas modifier le code source , La première pensée est de savoir si cela peut être fait en héritant de cette classe ?MaisjavaC'est un héritage unique., Hérité de l'aurore , Il n'y a aucun moyen d'hériter de la classe de compatibilité de Cloud letter , On dirait que l'héritage ne marchera pas .

  • De la demande

En fait, nous avons juste besoin d'une classe maintenant , Mise en œuvre interne de la logique et du cloud PluginXiaomiPlatformsReceiver C'est pareil, Peut transmettre le message reçu à Cloud SDK, Et cette classe peut modifier arbitrairement la relation d'héritage . Je me demande si tu penses , Nous pouvons écrire une classe identique dans notre propre code , Le code interne va directement PluginXiaomiPlatformsReceiverUne copie de, Et modifier la relation d'héritage n'est pas juste !C'est vrai., Nous sommes toujours venus voir yunxin PluginXiaomiPlatformsReceiver:AndroidConflit de poussée du fabricant..,Intégration mobileh5Page_Développement mobile_07

Et bien que cette classe soit confuse ,Mais c'est bon.,Le code source est là.sdkMoyenne, Peut également être appelé à l'extérieur , Nous pouvons copier le Code directement dans notre nouvelle classe PluginXiaomiPlatformsReceiverYxMoyenne:

import?cn.jpush.android.thirdpush.xiaomi.a;// Introduire des paquets d'aurores confuses

public?class?PluginXiaomiPlatformsReceiverYx?extends?MiPushMessageReceiver?{

private?static?final?String?TAG?=?“XMPlatformsReceiver”;

Je vais partager une information,J'espère que cela vous aidera à progresser.

Contenu:AndroidApprendrePDF+Vidéo de schéma+Documents d'entrevue+Notes sur le code source,Technologie architecturale avancée cerveau、AndroidÉlaboration d'un profil d'entrevue,Données architecturales avancées avancées Le contenu de ces morceaux.Partager avec tout le monde,Parfait pour les amis qui ont eu des entretiens récents et qui veulent continuer sur la voie technique.

Si vous en avez besoin,C'est bon. Cliquez surAndroidApprendrePDF+Vidéo de schéma+Documents d'entrevue+Obtenir des notes de code source gratuitement

Comme dans cet article.,Autant me faire un petit compliment、Laissez un message dans la zone de commentaires ou faites - le suivre.~

AndroidConflit de poussée du fabricant..,Intégration mobileh5Page_Programmeur_08

版权声明
本文为[Mb61c1dbbb44788]所创,转载请带上原文链接,感谢
https://cdmana.com/2022/01/202201150224017905.html

Scroll to Top