iOS中關(guān)于信鴿推送的使用demo詳解
最近在看推送方面的知識(shí),用的是信鴿推送主要是因?yàn)楹笈_(tái)用的是信鴿
推送用第三方推送,也就是在客戶端建一個(gè)廣播接收器,當(dāng)服務(wù)器發(fā)送消息時(shí)發(fā)送到信鴿,信鴿再發(fā)送一次,廣播接受器接受下;
我實(shí)現(xiàn)的功能比較簡(jiǎn)單,當(dāng)app在運(yùn)行狀態(tài)時(shí),會(huì)在主頁展示一個(gè)彈窗展示推送的消息;如果app不在運(yùn)行狀態(tài)且service沒被銷毀就展示默認(rèn)的通知
那么如何在主頁展示彈窗:當(dāng)廣播接受器收到我要的消息時(shí),用觀察者模式,收到消息在發(fā)送個(gè)消息個(gè)主界面
官方的Demo連接:http://xg.qq.com/xg/help/ctr_help/download
修改后Demo的地址:http://download.csdn.net/detail/qq_29774291/9635735
1.先按照官網(wǎng)的例子添加好權(quán)限及服務(wù)有些服務(wù)要改成自己的包名;
2.把官網(wǎng)的廣播接受器先復(fù)制到自己的項(xiàng)目中,再在清單文件中添加;
3.隨后添加從官網(wǎng)給出的3個(gè)AccessKey了
<meta-data android:name="com.tencent.rdm.uuid" android:value="eb5fa555d70c3246a4944f55be8c266b" /> <!-- 【必須】 請(qǐng)將YOUR_ACCESS_ID修改為APP的AccessId,“21”開頭的10位數(shù)字,中間沒空格 --> <!-- 【必須】 請(qǐng)修改為APP的AccessId,“21”開頭的10位數(shù)字,中間沒空格 --> <meta-data android:name="XG_V2_ACCESS_ID" android:value="2100219302" /> <!-- 【必須】 請(qǐng)修改為APP的AccessKey,“A”開頭的12位字符串,中間沒空格 --> <meta-data android:name="XG_V2_ACCESS_KEY" android:value="A15KJ71W9ELC" />
4.現(xiàn)在在主界面中注冊(cè)信鴿推送主要是獲取一個(gè)token,然后可以上傳給服務(wù)端,現(xiàn)在服務(wù)器就可以給你發(fā)送消息了;當(dāng)然從信鴿官方后臺(tái)可以發(fā)送消息,但是從信鴿后臺(tái)發(fā)送的消息有時(shí)會(huì)接受不到,這點(diǎn)做的完全不及極光推送好
XGPushConfig.enableDebug(this, true);這句發(fā)布的時(shí)候記得改為false或刪除
//信鴿start private String token; private Message message = null; private void XGInit() { // TODO Auto-generated method stub XGPushConfig.enableDebug(this, true); // 如果需要知道注冊(cè)是否成功,請(qǐng)使用registerPush(getApplicationContext(), // XGIOperateCallback)帶callback版本 // 如果需要綁定賬號(hào),請(qǐng)使用registerPush(getApplicationContext(),account)版本 // 具體可參考詳細(xì)的開發(fā)指南 // 傳遞的參數(shù)為ApplicationContext //Context context = getApplicationContext(); //1.獲取設(shè)備的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方法,當(dāng)消息發(fā)送來時(shí),將消息發(fā)送到主界面,不展示通知
不過你先要知道你app是否正在運(yùn)行狀態(tài)
/** * 判斷是否運(yùn)行在前臺(tái) * * @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類判斷(不需要額外權(quán)限): 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("后臺(tái)", appProcess.processName); return true; } else { Log.i("前臺(tái)", appProcess.processName); return false; } } } return false; }
6.通知EventBus來實(shí)現(xiàn)觀察者模式在廣播接收器中發(fā)送消息
// 消息透?jìng)? @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為前臺(tái)配置的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發(fā)送的消息,展示一個(gè)彈窗
@Subscribe public void onMessageReviced(final PushTextMessage pushTextMessage){ Log.d("jiejie", "好" + " 標(biāo)題" +pushTextMessage.getTitle() + " 內(nèi)容:" +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("推送的標(biāo)題"); dialog.setMessage(text.getContent()); dialog.setPositiveButton("確認(rèn)", 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中關(guān)于信鴿推送的使用demo詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
關(guān)于iOS 11下app圖標(biāo)變空白問題的解決方法
升級(jí)到iOS11系統(tǒng)下自己的項(xiàng)目桌面app圖標(biāo)不見了,通過查找相關(guān)的資料終于找到了解決方法,下面這篇文章主要給大家介紹了關(guān)于iOS 11下app圖標(biāo)變空白問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12iOS開發(fā)之MRC(手動(dòng)內(nèi)存管理)詳解
這篇文章主要介紹了?iOS開發(fā)之MRC(手動(dòng)內(nèi)存管理)詳解的相關(guān)資料,需要的朋友可以參考下2022-08-08Objective-C實(shí)現(xiàn)冒泡排序算法的簡(jiǎn)單示例
冒泡排序即是依次比較相鄰的兩個(gè)數(shù),如果后面的數(shù)較小則交換到前面一個(gè)數(shù)的位置上,這里我們來看一下Objective-C實(shí)現(xiàn)冒泡排序算法的簡(jiǎn)單示例2016-06-06iOS開發(fā)-實(shí)現(xiàn)大文件下載與斷點(diǎn)下載思路
本篇文章主要介紹了iOS開發(fā)-實(shí)現(xiàn)大文件下載與斷點(diǎn)下載思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01改變iOS應(yīng)用中UITableView的背景顏色與背景圖片的方法
這篇文章主要介紹了改變iOS應(yīng)用中UITableView的背景顏色與背景圖片的方法,將UITableView的header、footer設(shè)成clearColor時(shí)要注意實(shí)際效果是否真的變透明,需要的朋友可以參考下2016-03-03iOS中監(jiān)聽UITextField值改變事件的方法實(shí)例
UITextField 是一個(gè)用來處理文本輸入和現(xiàn)實(shí)的控件,在我們的開發(fā)當(dāng)中也是經(jīng)常被用到。下面這篇文章主要給大家介紹了關(guān)于iOS中監(jiān)聽UITextField值改變事件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07iOS實(shí)現(xiàn)錄音轉(zhuǎn)碼MP3及轉(zhuǎn)碼BASE64上傳示例
本篇文章主要介紹了iOS實(shí)現(xiàn)錄音轉(zhuǎn)碼MP3及轉(zhuǎn)碼BASE64上傳示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02iOS實(shí)現(xiàn)手勢(shì)滑動(dòng)解鎖功能簡(jiǎn)析
本篇文章主要介紹了iOS實(shí)現(xiàn)手勢(shì)滑動(dòng)解鎖功能簡(jiǎn)析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10