Push는 모바일 앱의 필수 기능입니다. 이번에는 회사 프로젝트 때문에 공부해야겠습니다. 푸시는 일반적으로 서버 측에서 작성되기 때문에 완전한 데모를 작성하는 것은 Android를 모르는 Javaweb 프로그래머에게는 골치 아픈 일입니다. 그래서 여기에는 참고용으로 처음부터 끝까지 예시를 작성하겠습니다. Android를 이해하지 못하기 때문에 프로젝트 요구 사항 때문에 Baidu에서 데모를 만들었습니다. 여기에는 부족한 점이 많아 전문가에게 수정을 요청하고 싶지 않습니다.
1. 우선 오로라 푸시가 무엇인지 간단히 소개하겠습니다
① 푸시가 필요한 이유: 데이터 동기화 문제를 해결하기 위해 모바일 플랫폼에서 흔히 사용하는 방법은 두 가지가 있습니다. 하나는 정기적으로 서버에 있는 데이터를 쿼리하는 것으로 폴링(Polling)이라고도 하며, 다른 하나는 휴대폰과 서버 사이에 긴 TCP 연결을 유지하는 것입니다. 서버에 데이터가 있으면 실시간으로 클라이언트에 푸시됩니다. 우리는 푸시라고 부릅니다. 모바일 네트워크에서는 푸시를 할 때 긴 연결을 유지하는 것이 기술적으로 어렵고, 사용자 수가 늘어나면 긴 연결을 유지하기 위해 많은 서버가 필요하고 비용도 매우 높습니다. 따라서 푸시 서비스를 지원하려면 타사 jar 패키지가 필요합니다. 더 자세한 내용을 알고 싶으시면 Aurora Push 공식 문서를 참고해주세요.
②Jigang Push의 인기 답변: jpush API를 호출하여 Jiguang Push 서버에 푸시해야 하는 콘텐츠를 보내는 것입니다. Jiguang Push 서버는 우리가 푸시한 콘텐츠를 기반으로 특정 앱에 푸시하도록 선택합니다. 과거에.
2. 소스 코드
서버 코드:
Android 클라이언트 코드:
Android 환경: ADT+SDK+eclipse
ADT 다운로드:
SDK 다운로드:
필수 JDK 환경이 설치되어 있습니다. 하나씩 설명하지 마십시오.
참고: 코드는 직접 가져올 수 있으며 몇 군데에서만 변경하면 됩니다. 이에 대해서는 나중에 설명하겠습니다. 먼저 Android 환경을 설정하는 방법과 코드를 성공적으로 가져올 수 있는지 알려드리겠습니다
3. 작업 단계
① 플러그인 설치
sdk
은이 단계가 완료되면 페이지가 Android 개발 인터페이스로 전환됩니다 도구에서 설치하려는 일반 선택 항목과 필요한 Android 버전을 선택합니다. 그러면 여기서는 선택하지 않았으므로 회색으로 표시됩니다.
참고: 느린 설치 또는 설치 실패 관련 두 가지 방법이 있습니다.
① FQ 소프트웨어 사용 블루 라이트 사용 ② 구성 미러 서버 사용 그림과 같이:
③ Android 프로젝트를 import 합니다. (서버측 프로젝트는 import 방법은 따로 설명하지 않습니다.)
프로젝트 목록의 빈 공간에 우클릭 - import 선택 - 그림과 같이 동작합니다
그런 다음 Android 프로그램을 실행하세요(데이터 케이블을 연결하는 것이 가장 좋습니다. 휴대폰에서 USB 디버깅을 켜고 프로그램이 실행 중일 때 휴대폰에 다운로드하세요) 다음에서 다운로드할 수 있습니다. 자세한 내용은 바이두를 참조하세요. 4. 오로라 푸시 이용방법 (공식 홈페이지에서 계정 등록 필수)
구체적인 사용법은 바이두를 참고하시거나, 아래 메인 스크린샷을 참고해주세요
appkey. 그리고 마스터 시크릿은 나중에 사용하겠습니다5, 안드로이드 구성 파일을 수정하고, appkey를 추가한 애플리케이션의 appkey로 변경하세요6. 서버 코드 표시, 코드가 모두 주석 처리되어 있어서 승리했습니다 하나씩 설명하지 마세요
이 세가지만 사용하세요 APPKET, MASTERSECRET 코드를 Jiguang Developer Service에 애플리케이션을 추가할 때 생성된 문자열로 변경하세요.
1 package com.uxun.serviceImpl; 2 3 import com.uxun.service.JPushService; 4 5 import cn.jiguang.common.resp.APIConnectionException; 6 import cn.jiguang.common.resp.APIRequestException; 7 import cn.jpush.api.JPushClient; 8 import cn.jpush.api.push.PushResult; 9 import cn.jpush.api.push.model.Platform; 10 import cn.jpush.api.push.model.PushPayload; 11 import cn.jpush.api.push.model.audience.Audience; 12 import cn.jpush.api.push.model.notification.AndroidNotification; 13 import cn.jpush.api.push.model.notification.IosNotification; 14 import cn.jpush.api.push.model.notification.Notification; 15 16 public class JPushServiceImpl implements JPushService { 17 18 private final static String APPKET = "44262636e2afd75d9b9f7932"; 19 20 private final static String MASTERSECRET = "ae5c0ab5f093b2aba1f8ce25"; 21 22 private static JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKET);//通知默认保留24小时。 23 24 @Override 25 public int sendToRegistrationId(String registrationId, String notification_alert, String notification_title, 26 String extrasparam) { 27 int result = 0; 28 try { 29 PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithRegistrationId(registrationId, 30 notification_alert, notification_title, extrasparam); 31 System.out.println(pushPayload); 32 PushResult pushResult=jPushClient.sendPush(pushPayload); //发送推送对象 33 //System.out.println(pushResult); 34 if(pushResult.getResponseCode() == 200) { //状态码等于200 为成功 35 result=1; 36 } 37 } catch (APIConnectionException e) { 38 e.printStackTrace(); 39 } catch (APIRequestException e) { 40 e.printStackTrace(); 41 } 42 43 return result; 44 } 45 46 @Override 47 public int sendToAll(String notification_alert, String notification_title, String extrasparam) { 48 int result = 0; 49 try { 50 PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithAll(notification_alert, 51 notification_title, extrasparam); 52 System.out.println(pushPayload); 53 PushResult pushResult=jPushClient.sendPush(pushPayload); //发送推送对象 54 //System.out.println(pushResult); 55 if(pushResult.getResponseCode() == 200) { //状态码等于200 为成功 56 result=1; 57 } 58 } catch (APIConnectionException e) { 59 e.printStackTrace(); 60 } catch (APIRequestException e) { 61 e.printStackTrace(); 62 } 63 64 return result; 65 } 66 67 @Override 68 public int sendToAllIos(String notification_alert, String notification_title, String extrasparam) { 69 70 int result = 0; 71 try { 72 PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithIos(notification_alert, 73 notification_title, extrasparam); 74 System.out.println(pushPayload); 75 PushResult pushResult=jPushClient.sendPush(pushPayload); //发送推送对象 76 //System.out.println(pushResult); 77 if(pushResult.getResponseCode() == 200) { //状态码等于200 为成功 78 result=1; 79 } 80 } catch (APIConnectionException e) { 81 e.printStackTrace(); 82 } catch (APIRequestException e) { 83 e.printStackTrace(); 84 } 85 86 return result; 87 } 88 89 @Override 90 public int sendToAllAndroid(String notification_alert, String notification_title, String extrasparam) { 91 92 int result = 0; 93 try { 94 PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithAndroid(notification_alert, 95 notification_title, extrasparam); 96 System.out.println(pushPayload); 97 PushResult pushResult=jPushClient.sendPush(pushPayload); //发送推送对象 98 //System.out.println(pushResult); 99 if(pushResult.getResponseCode() == 200) { //状态码等于200 为成功100 result=1;101 }102 } catch (APIConnectionException e) {103 e.printStackTrace();104 } catch (APIRequestException e) {105 e.printStackTrace();106 }107 108 return result;109 }110 111 /**112 * 建立以唯一设备标识符推送的对象113 * @param registrationId 唯一设备标识114 * @param notification_alert 通知内容115 * @param notification_title 通知标题116 * @param extrasparam 扩展字段117 * @return 返回推送对象118 */119 private static PushPayload buildPushObjectWithRegistrationId(String registrationId, String notification_alert, String notification_title,120 String extrasparam) {121 return PushPayload.newBuilder()122 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台123 .setPlatform(Platform.all())124 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id125 .setAudience(Audience.registrationId(registrationId))126 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发127 .setNotification(Notification.newBuilder()128 //指定当前推送的android通知129 .addPlatformNotification(AndroidNotification.newBuilder()130 .setAlert(notification_alert) //设置通知内容(必填)131 .setTitle(notification_title) //设置通知标题(可选)132 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)133 .addExtra("androidNotification extras key",extrasparam)134 .build())135 136 //指定当前推送的iOS通知137 .addPlatformNotification(IosNotification.newBuilder()138 //传一个IosAlert对象,指定apns title、title、subtitle等139 .setAlert(notification_alert)140 //直接传alert141 //此项是指定此推送的badge(应用角标)自动加1142 .incrBadge(1)143 //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,144 // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音145 .setSound("sound.caf")146 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)147 .addExtra("iosNotification extras key",extrasparam)148 //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification149 //取消此注释,消息推送时ios将无法在锁屏情况接收150 // .setContentAvailable(true)151 .build())152 153 //指定当前推送的winPhone通知154 /*.addPlatformNotification(WinphoneNotification.newBuilder()155 .setAlert(notification_alert)156 //.setTitle("")) //设置通知标题(可选)此标题将取代显示app名称的地方157 .build())*/158 .build())159 .build();160 }161 162 /**163 * 建立推送所有用户的推送对象164 * @param notification_alert 通知内容165 * @param notification_title 通知标题166 * @param extrasparam 扩展字段167 * @return 返回推送对象168 */169 private static PushPayload buildPushObjectWithAll(String notification_alert,170 String notification_title, String extrasparam) {171 return PushPayload.newBuilder()172 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台173 .setPlatform(Platform.all())174 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id175 .setAudience(Audience.all())176 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发177 .setNotification(Notification.newBuilder()178 //指定当前推送的android通知179 .addPlatformNotification(AndroidNotification.newBuilder()180 .setAlert(notification_alert) //设置通知内容(必填)181 .setTitle(notification_title) //设置通知标题(可选)182 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)183 .addExtra("androidNotification extras key",extrasparam)184 .build())185 186 //指定当前推送的iOS通知187 .addPlatformNotification(IosNotification.newBuilder()188 //传一个IosAlert对象,指定apns title、title、subtitle等189 .setAlert(notification_alert)190 //直接传alert191 //此项是指定此推送的badge(应用角标)自动加1192 .incrBadge(1)193 //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,194 // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音195 .setSound("sound.caf")196 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)197 .addExtra("iosNotification extras key",extrasparam)198 //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification199 //取消此注释,消息推送时ios将无法在锁屏情况接收200 // .setContentAvailable(true)201 .build())202 203 //指定当前推送的winPhone通知204 /*.addPlatformNotification(WinphoneNotification.newBuilder()205 .setAlert(notification_alert)206 //.setTitle("")) //设置通知标题(可选)此标题将取代显示app名称的地方207 .build())*/208 .build())209 .build();210 }211 212 /**213 * 建立推送所有ios用户的推送对象214 * @param notification_alert 通知内容215 * @param notification_title 通知标题216 * @param extrasparam 扩展字段217 * @return 返回推送对象218 */219 private static PushPayload buildPushObjectWithIos(String notification_alert,220 String notification_title, String extrasparam) {221 return PushPayload.newBuilder()222 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台223 .setPlatform(Platform.ios())224 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id225 .setAudience(Audience.all())226 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发227 .setNotification(Notification.newBuilder()228 229 //指定当前推送的iOS通知230 .addPlatformNotification(IosNotification.newBuilder()231 //传一个IosAlert对象,指定apns title、title、subtitle等232 .setAlert(notification_alert)233 //直接传alert234 //此项是指定此推送的badge(应用角标)自动加1235 .incrBadge(1)236 //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,237 // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音238 .setSound("sound.caf")239 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)240 .addExtra("iosNotification extras key",extrasparam)241 //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification242 //取消此注释,消息推送时ios将无法在锁屏情况接收243 // .setContentAvailable(true)244 .build())245 .build())246 .build();247 }248 249 /**250 * 建立推送所有安卓用户的推送对象251 * @param notification_alert 通知内容252 * @param notification_title 通知标题253 * @param extrasparam 扩展字段254 * @return 返回推送对象255 */256 private static PushPayload buildPushObjectWithAndroid(String notification_alert,257 String notification_title, String extrasparam) {258 return PushPayload.newBuilder()259 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台260 .setPlatform(Platform.android())261 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id262 .setAudience(Audience.all())263 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发264 .setNotification(Notification.newBuilder()265 //指定当前推送的android通知266 .addPlatformNotification(AndroidNotification.newBuilder()267 .setAlert(notification_alert) //设置通知内容(必填)268 .setTitle(notification_title) //设置通知标题(可选)269 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)270 .addExtra("androidNotification extras key",extrasparam)271 .build())272 .build())273 .build();274 }275 276 277 278 }
서버 코드를 실행한 후 휴대폰은 다음 알림을 받게 됩니다.
실제로 서버는 고유하게 식별된 앱 키와 마스터 시크릿을 통해 Aurora 서버에 알림을 보냅니다. , 서버는 이를 해당 앱으로 전달합니다. (appkey는 위 앱의 구성 파일에도 구성되어 있습니다)
구체적인 작업이 너무 많아서 자세히 설명할 수는 없지만, 단계가 너무 많아서 스크린샷을 하나씩 찍지는 않겠습니다. 여기서는 구체적인 지침만 대부분 알려드리겠습니다.
위 내용은 Jiguang push Jpush의 예시 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!