最初のステップは websocket を導入することです
実装 "org.java-websocket:Java-WebSocket:1.5.1"
第二段階
public class JWebSocketClient extends WebSocketClient { public JWebSocketClient(URI serverUri) { super(serverUri, new Draft_6455()); } @オーバーライド public void onOpen(ServerHandshake ハンドシェイクデータ) { Log.e("JWebSocketClient", "onOpen()"); } @オーバーライド public void onMessage(文字列メッセージ) { Log.e("JWebSocketClient", メッセージ); } @オーバーライド public void onClose(int code, String reason, boolean remote) { Log.e("JWebSocketClient", "onClose()"); } @オーバーライド public void onError(Exception ex) { Log.e("JWebSocketClient", ex.getMessage()); } }
三段目
アプリケーションに直接入れます
プライベート JWebSocketClient クライアント。 プライベート URI;public class BaseApplication extends Application {@オーバーライド public void onCreate() { super.onCreate();//Push はインスタント メッセージングも実行できます uri= URI.create("ws:// バックグラウンドで指定されたアドレスです"); client= new JWebSocketClient(uri) { @オーバーライド public void onMessage(文字列メッセージ) { //message は受信したメッセージであるため、バックグラウンドで json を送信し、解析して使用できます Log.e("JWebSClientService", メッセージ); sendChatMsg(メッセージ); } }; // 接続を開く 接続();//Android 10 は通知タイプを設定する必要があります
//通知タイプを設定します。ここでは 2 つ設定します。さまざまなニーズに応じて、独自の設定を追加できます。使用する前に、通知許可を有効にすることを忘れないでください。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 文字列 channelId = "チャット"; String channelName = "チャット メッセージ"; int の重要性 = NotificationManager.IMPORTANCE_HIGH; createNotificationChannel(channelId, channelName, 重要性); channelId = "購読"; channelName = "購読メッセージ"; 重要性 = NotificationManager.IMPORTANCE_DEFAULT; createNotificationChannel(channelId, channelName, 重要性); }}
@TargetApi(Build.VERSION_CODES.O) private void createNotificationChannel(String channelId, String channelName, int important) { NotificationChannel チャネル = 新しい NotificationChannel(channelId、channelName、重要度); NotificationManager notificationManager = (NotificationManager) getSystemService( 通知_サービス); notificationManager.createNotificationChannel(チャンネル); }//WebSocket オープン接続 プライベートボイド接続(){ 試す { client.connectBlocking(); キャッチ(InterruptedException e){ e.printStackTrace(); } }プライベート int requestCode=0; //使用箇所を見て2箇所、使用箇所に固定値を書き込むと1箇所目はプッシュした情報がコピーされ、2箇所目はプッシュのみ表示されます。書き方がイマイチ、わからない場合はこの2箇所を固定値として直接書いて試してみてください public void sendChatMsg(String msg) { requestCode++; インテント インテント = 新しいインテント(this, NotificationClickReceiver.class); Log.e("fhxx","これが私が送信しようとしているものです"+msg +" ----- >"+requestCode); インテント.putExtra("msg",msg); PendingIntent ブロードキャスト = PendingIntent.getBroadcast(this、requestCode、意図、PendingIntent.FLAG_UPDATE_CURRENT); NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification notification = new NotificationCompat.Builder(this, "chat") .setContentTitle("チャットメッセージを受信しました") .setContentText(メッセージ) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.icon_logo) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.icon_logo)) .setDefaults(Notification.GROUP_ALERT_ALL) //デフォルトの通知音、振動モード、ライトを設定 .setAutoCancel(真) .setContentIntent(ブロードキャスト) 。建てる(); manager.notify(requestCode, 通知); }}
public class NotificationClickReceiver は BroadcastReceiver を拡張します { @オーバーライド public void onReceive(コンテキスト コンテキスト、インテント インテント) { 文字列 msg = インテント.getStringExtra("msg"); インテント.setFlags(インテント.FLAG_ACTIVITY_NEW_TASK); Log.e("fhxx","これは私が受け取ったものです-"+msg); } }
ここまででプッシュの基本機能は実現できました。