iOS 에서 비둘기 푸 시 사용 데모 에 대한 자세 한 설명
푸 시 는 제3자 푸 시,즉 클 라 이언 트 에 방송 수신 기 를 구축 하고 서버 가 메 시 지 를 보 낼 때 비둘기 에 게 보 내 고 비 둘 기 는 다시 보 내 며 방송 수신 기 는 받 아들 인 다.
제 가 실현 하 는 기능 은 비교적 간단 합 니 다.app 이 실행 상태 에 있 을 때 홈 페이지 에 팝 업 창 에서 푸 시 메 시 지 를 보 여 줍 니 다.앱 이 실행 중인 상태 가 아니 고 서비스 가 삭제 되 지 않 았 다 면 기본 알림 을 보 여 줍 니 다.
그러면 어떻게 홈 페이지 에 팝 업 창 을 보 여 줍 니까?라디오 수신 기 가 내 가 원 하 는 메 시 지 를 받 았 을 때 관찰자 모드 로 메 시 지 를 받 고 메 시 지 를 보 내 는 메 인 인터페이스 입 니 다.
공식 데모 연결:http://xg.qq.com/xg/help/ctr_help/download
수정 후 데모 의 주소:http://download.csdn.net/detail/qq_29774291/9635735
1.먼저 홈 페이지 의 예 에 따라 권한 과 서 비 스 를 추가 하고 일부 서 비 스 는 자신의 가방 이름 으로 바 꿔 야 한다.
2.홈 페이지 의 방송 수신 기 를 자신의 프로젝트 에 복사 한 다음 목록 파일 에 추가 합 니 다.
3.홈 페이지 에서 제 시 된 AccessKey 3 개 추가
<meta-data android:name="com.tencent.rdm.uuid" android:value="eb5fa555d70c3246a4944f55be8c266b" />
<!-- 【 】 YOUR_ACCESS_ID APP AccessId,“21” 10 , -->
<!-- 【 】 APP AccessId,“21” 10 , -->
<meta-data
android:name="XG_V2_ACCESS_ID"
android:value="2100219302" />
<!-- 【 】 APP AccessKey,“A” 12 , -->
<meta-data
android:name="XG_V2_ACCESS_KEY"
android:value="A15KJ71W9ELC" />
4.현재 메 인 화면 에 비둘기 푸 시 를 등록 하 는 것 은 주로 token 을 가 져 온 다음 에 서버 에 업로드 할 수 있 습 니 다.이제 서버 에서 메 시 지 를 보 낼 수 있 습 니 다.물론 비둘기 공식 백 스테이지 에서 메 시 지 를 보 낼 수 있 지만 비둘기 백 스테이지 에서 보 낸 메 시 지 는 받 아들 일 수 없 을 때 가 있다.이 점 은 극광 푸 시 에 전혀 미 치지 못 한다.XGPushConfig.enableDebug(this, true);이 문 구 는 발표 할 때 false 로 바 꾸 거나 삭제 하 는 것 을 기억 하 세 요.
// start
private String token;
private Message message = null;
private void XGInit() {
// TODO Auto-generated method stub
XGPushConfig.enableDebug(this, true);
// , registerPush(getApplicationContext(),
// XGIOperateCallback) callback
// , registerPush(getApplicationContext(),account)
//
// ApplicationContext
//Context context = getApplicationContext();
//1. Token
Handler handler = new HandlerExtension(MainActivity.this);
message = handler.obtainMessage();
XGPushManager.registerPush(getApplicationContext(), new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
// TODO Auto-generated method stub
Log.d("jiejie", "+++ register push sucess. token:" + data + " " + flag);
token = data + "";
message.obj = "+++ register push sucess. token:" + data;
System.out.println(token);
message.sendToTarget();
}
@Override
public void onFail(Object data, int errCode, String msg) {
// TODO Auto-generated method stub
Log.d("jiejie", "+++ register push fail. token:" + data
+ ", errCode:" + errCode + ",msg:"
+ msg);
message.obj = "+++ register push fail. token:" + data
+ ", errCode:" + errCode + ",msg:" + msg;
message.sendToTarget();
}
});
}
private static class HandlerExtension extends Handler{
WeakReference<MainActivity> mActivity;
HandlerExtension(MainActivity activity) {
mActivity = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
MainActivity theActivity = mActivity.get();
if(theActivity == null){
theActivity = new MainActivity();
}
if(msg != null){
Log.d(Constants.LogTag, msg.obj.toString());
System.out.println("ddd"+msg.obj.toString());
}
}
}
5.라디오 수신 기 에 있 는 onTextMessage 방법 을 수정 하고 메 시 지 를 보 낼 때 메 인 화면 에 메 시 지 를 보 내 고 알림 을 보 여주 지 않 습 니 다.하지만 앱 이 실행 중인 지 알 아야 합 니 다.
/**
*
*
* @param context
* @return
*/
public static boolean isRunningForeground(Context context) {
String packageName = getPackageName(context);
String topActivityClassName = getTopActivityName(context);
Log.d("TAG", "packageName=" + packageName + ",topActivityClassName=" + topActivityClassName);
if (packageName != null && topActivityClassName != null && topActivityClassName.startsWith(packageName)) {
Log.d("TAG", "---> isRunningForeGround");
return true;
} else {
Log.d("TAG", "---> isRunningBackGround");
return false;
}
}
// 2、 RunningAppProcessInfo ( ):
public static boolean isBackground(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(context.getPackageName())) {
if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {
Log.i(" ", appProcess.processName);
return true;
} else {
Log.i(" ", appProcess.processName);
return false;
}
}
}
return false;
}
6.EventBus 에 알 리 면 관찰자 모드 가 방송 수신 기 에서 메 시 지 를 보 냅 니 다.
//
@Override
public void onTextMessage(Context context, XGPushTextMessage message) {
String text = " :" + message.toString();
EventBus.getDefault().post(text);
System.out.println(text);
// key-value
PushTextMessage pushTextMessage = new PushTextMessage();
String title = message.getTitle();
String content = message.getContent();
pushTextMessage.setTitle(title);
pushTextMessage.setContent(content);
String customContent = message.getCustomContent();
if (customContent != null && customContent.length() != 0) {
try {
// JSONObject obj = new JSONObject(customContent);
// // key1 key
// if (!obj.isNull("key")) {
// String value = obj.getString("key");
// LogUtils.log(LogTag, "get custom value:" + value);
// }
CustomContent custom = com.alibaba.fastjson.JSONObject.parseObject(customContent, CustomContent.class);
if (custom != null) {
pushTextMessage.setCustomContent(custom);
}
// ...
} catch (Exception e) {
System.out.println(e + "d");
e.printStackTrace();
}
}
show(context, text);
Log.d("jiejie", "pushTextMessage:" + pushTextMessage);
// EventBus.getDefault().post(pushTextMessage);
try {
// APP ...
boolean isForeground = AppUtil.isRunningForeground(context);
Log.d("jiejie", isForeground + "d");
if (isForeground) {
EventBus.getDefault().post(pushTextMessage);
} else {
notify(context, title, content);
}
} catch (Exception e) {
System.out.println(e + "ddd");
e.printStackTrace();
}
7.메 인 화면 에서 EventBus 가 보 낸 메 시 지 를 받 고 팝 업 창 을 보 여 줍 니 다.
@Subscribe
public void onMessageReviced(final PushTextMessage pushTextMessage){
Log.d("jiejie", " " + " " +pushTextMessage.getTitle() + " :" +pushTextMessage.getContent() + "CustomContent" + pushTextMessage.getCustomContent().getCmd());
if(pushTextMessage != null){
showAlertDialog(this, pushTextMessage);
}
}
private void showAlertDialog(Context context,PushTextMessage text){
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setTitle(" ");
dialog.setMessage(text.getContent());
dialog.setPositiveButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
}
});
AlertDialog mDialog = dialog.create();
mDialog.show();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
EventBus.getDefault().unregister(this);
}
위 에서 말 한 것 은 편집장 이 소개 한 iOS 에서 전서구 푸 시 에 관 한 demo 사용 에 대한 상세 한 설명 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.