iOS中关于信鸽推送的使用demo详解

2025-05-29 0 25

最近在看推送方面的知识,用的是信鸽推送主要是因为后台用的是信鸽

推送用第三方推送,也就是在客户端建一个广播接收器,当服务器发送消息时发送到信鸽信鸽再发送一次,广播接受器接受下;

我实现的功能比较简单,当app在运行状态时,会在主页展示一个弹窗展示推送的消息;如果app不在运行状态且service没被销毁就展示默认的通知

那么如何在主页展示弹窗:当广播接受器收到我要的消息时,用观察者模式,收到消息在发送个消息个主界面

官方的Demo连接:http://xg.qq.com/xg/help/ctr_help/download

修改后Demo的地址:http://download.csdn.net/detail/qq_29774291/9635735

1.先按照官网的例子添加好权限及服务有些服务要改成自己的包名;

2.把官网的广播接受器先复制到自己的项目中,再在清单文件中添加;

3.随后添加从官网给出的3个AccessKey了

?

1

2

3

4

5

6

7

8

9

10
<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或删除

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56
//信鸽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方法,当消息发送来时,将消息发送到主界面,不展示通知

不过你先要知道你app是否正在运行状态

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35
/**

* 判断是否运行在前台

*

* @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来实现观察者模式在广播接收器中发送消息

  1. //消息透传
  2. @Override
  3. publicvoidonTextMessage(Contextcontext,XGPushTextMessagemessage){
  4. Stringtext="收到消息:"+message.toString();
  5. EventBus.getDefault().post(text);
  6. System.out.println(text);
  7. //获取自定义key-value
  8. PushTextMessagepushTextMessage=newPushTextMessage();
  9. Stringtitle=message.getTitle();
  10. Stringcontent=message.getContent();
  11. pushTextMessage.setTitle(title);
  12. pushTextMessage.setContent(content);
  13. StringcustomContent=message.getCustomContent();
  14. if(customContent!=null&&customContent.length()!=0){
  15. try{
  16. //JSONObjectobj=newJSONObject(customContent);
  17. ////key1为前台配置的key
  18. //if(!obj.isNull("key")){
  19. //Stringvalue=obj.getString("key");
  20. //LogUtils.log(LogTag,"getcustomvalue:"+value);
  21. //}
  22. CustomContentcustom=com.alibaba.fastjson.JSONObject.parseObject(customContent,CustomContent.class);
  23. if(custom!=null){
  24. pushTextMessage.setCustomContent(custom);
  25. }
  26. //…
  27. }catch(Exceptione){
  28. System.out.println(e+"d");
  29. e.printStackTrace();
  30. }
  31. }
  32. show(context,text);
  33. Log.d("jiejie","pushTextMessage:"+pushTextMessage);
  34. //EventBus.getDefault().post(pushTextMessage);
  35. try{
  36. //APP自主处理消息的过程…
  37. booleanisForeground=AppUtil.isRunningForeground(context);
  38. Log.d("jiejie",isForeground+"d");
  39. if(isForeground){
  40. EventBus.getDefault().post(pushTextMessage);
  41. }else{
  42. notify(context,title,content);
  43. }
  44. }catch(Exceptione){
  45. System.out.println(e+"ddd");
  46. e.printStackTrace();
  47. }

7.在主界面中接受EventBus发送的消息,展示一个弹窗

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
@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详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 iOS中关于信鸽推送的使用demo详解 https://www.kuaiidc.com/91386.html

相关文章

发表评论
暂无评论