文档章节

体验个推推送,感受Android推送的魅力

个推
 个推
发布于 2015/05/14 10:56
字数 1085
阅读 128
收藏 0

原博客转自:http://blog.csdn.net/dengyanyi11/article/details/44280699


消息推送在android应用中已经不胜枚举,足以体现它的重要性。今天我来和大家一起学习一下目前最主流的推送之一 - 个推推送 。

      1,我们先在个推官网注册一个自己的账号,然后在应用管理里登记自己的应用(应用标识记得填自己项目的packageName),拿到AppID,AppKey,AppSecret,MasterSecret(我们在后面需要用到这些)。

       请见图:

    2,之后我们在接入向导里下载个推的SDK(GETUI_ANDROID_SDK),解压发现API文档,Demo工程,资源文件。

       请见图:

       

     3,将资源文件导入我们工程的lib中。 

      请见图:

        

         4,在AndroidManifest.xml 中加入声明服务

[html] view plaincopy

  1. <pre name="code" class="html" style="color: rgb(35, 35, 35); font-size: 14px; line-height: 25px;"> <!-- 个推SDK配置开始 -->  

  2.         <!-- 配置的第三方参数属性 -->  

  3.         <meta-data  

  4.             android:name="PUSH_APPID"  

  5.             android:value="dKHYjw6bxB7VuuMp7n9uM9" /> <!-- APPID -->  

  6.         <meta-data  

  7.             android:name="PUSH_APPKEY"  

  8.             android:value="PesVQ3QhydATvduzLsj8E5" /> <!-- APPKEY -->  

  9.         <meta-data  

  10.             android:name="PUSH_APPSECRET"  

  11.             android:value="CsJEgWLA5Z5wxkdiZjkVR2" /> <!-- APPSECRET -->  

  12.         <meta-data  

  13.             android:name="PUSH_GROUPID"  

  14.             android:value="" /><span style="font-family: 'Microsoft Yahei', 宋体, 黑体;"><!-- 这里可以不填 --></span>  

  15.   

  16.         <service  

  17.             android:name="com.igexin.sdk.PushService"  

  18.             android:exported="true"  

  19.             android:label="NotificationCenter"  

  20.             android:process=":pushservice" >  

  21.         </service>  

  22.   

  23.         <receiver android:name="com.igexin.sdk.PushReceiver" >  

  24.             <intent-filter>  

  25.                 <action android:name="android.intent.action.BOOT_COMPLETED" />  

  26.                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  

  27.                 <action android:name="android.intent.action.USER_PRESENT" />  

  28.                 <action android:name="com.igexin.sdk.action.refreshls" />  

  29.             </intent-filter>  

  30.         </receiver>  

  31.         <receiver  

  32.             android:name="com.igexin.sdk.PushManagerReceiver"  

  33.             android:exported="false" >  

  34.             <intent-filter>  

  35.                 <action android:name="com.igexin.sdk.action.pushmanager" />  

  36.             </intent-filter>  

  37.         </receiver>  

  38.   

  39.         <activity  

  40.             android:name="com.igexin.sdk.PushActivity"  

  41.             android:excludeFromRecents="true"  

  42.             android:exported="false"  

  43.             android:process=":pushservice"  

  44.             android:taskAffinity="com.igexin.sdk.PushActivityTask"  

  45.             android:theme="@android :style/Theme.Translucent.NoTitleBar" >  

  46.         </activity>  

  47.         <!-- 配置弹框activity -->  

  48.         <activity  

  49.             android:name="com.igexin.getuiext.activity.GetuiExtActivity"  

  50.             android:configChanges="orientation|keyboard|keyboardHidden"  

  51.             android:excludeFromRecents="true"  

  52.             android:exported="false"  

  53.             android:process=":pushservice"  

  54.             android:taskAffinity="android.task.myServicetask"  

  55.             android:theme="@android :style/Theme.Translucent.NoTitleBar" />  

  56.   

  57.         <receiver  

  58.             android:name="com.igexin.getuiext.service.PayloadReceiver"  

  59.             android:exported="false" >  

  60.             <intent-filter>  

  61.                 <!-- 这个com.igexin.sdk.action.7fjUl2Z3LH6xYy7NQK4ni4固定,不能修改 -->  

  62.                 <action android:name="com.igexin.sdk.action.7fjUl2Z3LH6xYy7NQK4ni4" />  

  63.                 <!-- android:name="com.igexin.sdk.action.第三方的appId" -->  

  64.                 <action android:name="com.igexin.sdk.action.dKHYjw6bxB7VuuMp7n9uM9" />  

  65.             </intent-filter>  

  66.         </receiver>  

  67.   

  68.         <service  

  69.             android:name="com.igexin.getuiext.service.GetuiExtService"  

  70.             android:process=":pushservice" />  

  71.         <!-- 个推download模块配置 -->  

  72.         <service  

  73.             android:name="com.igexin.download.DownloadService"  

  74.             android:process=":pushservice" />  

  75.   

  76.         <receiver android:name="com.igexin.download.DownloadReceiver" >  

  77.             <intent-filter>  

  78.                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  

  79.             </intent-filter>  

  80.         </receiver<span style="font-family: 'Microsoft Yahei', 宋体, 黑体;">></span>  

[html] view plaincopy

  1. <span style="font-family: 'Microsoft Yahei', 宋体, 黑体;"></span><pre name="code" class="html" style="color: rgb(35, 35, 35); font-size: 14px; line-height: 25px;"> <span style="white-space:pre">  </span>    <!-- android:authorities="downloads.第三方包名" -->  


[html] view plaincopy

  1.         <provider  

  2.             android:name="com.igexin.download.DownloadProvider"  

  3.             android:authorities="downloads.com.dengyy.pushtest"  

  4.             android:process=":pushservice" />  

[html] view plaincopy

  1.         <!-- 透传消息Receiver -->  

  2.         <receiver  

  3.             android:name="com.dengyy.pushtest.PushDemoReceiver"  

  4.             android:exported="false" >  

  5.             <intent-filter>  

  6.                 <!-- action android:name="com.igexin.sdk.action.第三方的APPID" -->  

  7.                 <action android:name="com.igexin.sdk.action.dKHYjw6bxB7VuuMp7n9uM9" />  

  8.             </intent-filter>  

  9.         </receiver>  


      5,加入权限

[html] view plaincopy

  1. <!-- 个推权限 -->  

  2. <uses-permission android:name="android.permission.INTERNET" />  

  3. <uses-permission android:name="android.permission.READ_PHONE_STATE" />  

  4. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  

  5. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  

  6. <uses-permission android:name="android.permission.WAKE_LOCK" />  

  7. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  

  8. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

  9. <uses-permission android:name="android.permission.VIBRATE" />  

  10. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  

  11. <uses-permission android:name="getui.permission.GetuiService" />  

  12. <uses-permission android:name="android.permission.GET_TASKS" />  

  13. <!-- 自定义权限 -->  

  14. <permission  

  15.     android:name="getui.permission.GetuiService"  

  16.     android:protectionLevel="normal" >  

  17. </permission>  


      6,之后我们在MainActivity里启动初始化SDK。

[java] view plaincopy

  1. package com.dengyy.pushtest;  

  2.   

  3. import android.app.Activity;  

  4. import android.os.Bundle;  

  5. import android.view.Window;  

  6. import android.widget.TextView;  

  7.   

  8. import com.igexin.sdk.PushManager;  

  9.   

  10. public class MainActivity extends Activity {  

  11.     public static TextView tView = null;  

  12.     public static TextView tLogView = null;  

  13.   

  14.     @Override  

  15.     protected void onCreate(Bundle savedInstanceState) {  

  16.         super.onCreate(savedInstanceState);  

  17.         requestWindowFeature(Window.FEATURE_NO_TITLE);  

  18.         setContentView(R.layout.activity_main);  

  19.           

  20.         //初始化SDK  

  21.         PushManager.getInstance().initialize(this.getApplicationContext());  

  22.           

  23.     }  

  24. }  

      注意:PushManager.getInstance().initialize(this.getApplicationContext()) 一般在Activity或Service类内调用,可以在Activity的onCreate()方法中调用。不建议在Application继承类中调用。

       

      7,将官方Demo里PushDemoReceiver类复制到自己的项目中

      以下是我加入了一些容易理解的注释的代码:

[java] view plaincopy

  1. package com.dengyy.pushtest;  

  2.   

  3. import android.content.BroadcastReceiver;  

  4. import android.content.Context;  

  5. import android.content.Intent;  

  6. import android.os.Bundle;  

  7. import android.util.Log;  

  8.   

  9. import com.igexin.sdk.PushConsts;  

  10. import com.igexin.sdk.PushManager;  

  11.   

  12. public class PushDemoReceiver extends BroadcastReceiver {  

  13.   

  14.     @Override  

  15.     public void onReceive(Context context, Intent intent) {  

  16.         Bundle bundle = intent.getExtras();  

  17.         Log.d("GetuiSdkDemo""onReceive() action=" + bundle.getInt("action"));  

  18.         switch (bundle.getInt(PushConsts.CMD_ACTION)) {  

  19.   

  20.         case PushConsts.GET_MSG_DATA:  

  21.             // 获取透传数据  

  22.             // String appid = bundle.getString("appid");  

  23.             byte[] payload = bundle.getByteArray("payload");  

  24.   

  25.             String taskid = bundle.getString("taskid");  

  26.             String messageid = bundle.getString("messageid");  

  27.   

  28.             // smartPush第三方回执调用接口,actionid范围为90000-90999,可根据业务场景执行  

  29.             // 透传消息,根据事件id改变事件  

  30.             boolean result = PushManager.getInstance().sendFeedbackMessage(  

  31.                     context, taskid, messageid, 90001);  

  32.               

  33.             if(result){  

  34.                 Intent intentTemp = new Intent(context.getApplicationContext(),ResultActivity.class);  

  35.                 intentTemp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);   

  36.                 context.getApplicationContext().startActivity(intentTemp);  

  37.             }  

  38.               

  39.             if (payload != null) {  

  40.                 String data = new String(payload);  

  41.   

  42.                 Log.d("GetuiSdkDemo""Got Payload:" + data);  

  43.                 if (MainActivity.tLogView != null)  

  44.                     MainActivity.tLogView.append(data + "\n");  

  45.             }  

  46.             break;  

  47.         case PushConsts.GET_CLIENTID:  

  48.             // 获取ClientID(CID)  

  49.             // 第三方应用需要将CID上传到第三方服务器,并且将当前用户帐号和CID进行关联,以便日后通过用户帐号查找CID进行消息推送  

  50.             String cid = bundle.getString("clientid");  

  51.             if (MainActivity.tView != null)  

  52.                 MainActivity.tView.setText(cid);  

  53.             break;  

  54.         case PushConsts.THIRDPART_FEEDBACK:  

  55.             /* 

  56.              * String appid = bundle.getString("appid"); String taskid = 

  57.              * bundle.getString("taskid"); String actionid = 

  58.              * bundle.getString("actionid"); String result = 

  59.              * bundle.getString("result"); long timestamp = 

  60.              * bundle.getLong("timestamp"); 

  61.              *  

  62.              * Log.d("GetuiSdkDemo", "appid = " + appid); Log.d("GetuiSdkDemo", 

  63.              * "taskid = " + taskid); Log.d("GetuiSdkDemo", "actionid = " + 

  64.              * actionid); Log.d("GetuiSdkDemo", "result = " + result); 

  65.              * Log.d("GetuiSdkDemo", "timestamp = " + timestamp); 

  66.              */  

  67.             break;  

  68.         default:  

  69.             break;  

  70.         }  

  71.     }  

  72. }  

      

      8,到了这里,我们可以开始测试了。让消息飞起来吧!


     除此之外,我们还可以自定义消息推送,试试看吧


     我的Demo代码可以点这里下载:https://github.com/toeii/GeTuiPushDemo


本文转载自:http://blog.csdn.net/dengyanyi11/article/details/44280699

个推
粉丝 29
博文 90
码字总数 173630
作品 0
杭州
私信 提问
加载中

评论(7)

个推
个推 博主
顶一顶,看一看咯~
个推
个推 博主
顶一顶,看过来!
个推
个推 博主
顶一顶,大家早安!
个推
个推 博主
顶一顶,大家早上好!
个推
个推 博主
早起一顶,大家早安啊!
个推
个推 博主
感受Android推送的魅力
稻草人的信仰
稻草人的信仰
自定义推送是我自己推呢还是你们帮助推?
推送智能、 数据增能,个推助力中国安卓新生态的创建

近日,由国家发改委、工业和信息化部、中国科协指导,中国信息通信研究院主办,个推协办的“2018中国安卓开发者大会”在北京隆重召开。在这场国家级的行业盛会上,相关部委的领导、互联网领域...

个推君
2018/07/16
0
0
安卓9.0时代正式开启!凭啥又是它抢先?

导读 8月28日,距离安卓9.0官方正式发布才刚刚三个星期,华为+荣耀手机再次启动了全新九款机型的安卓9.0 Beta内测招募,速度之快再次令人咋舌。 本次内测招募,荣耀手机共有三款机型入围,分...

问题终结者
2018/08/29
23
0
真的来了!工信部将成立安卓统一推送联盟

上个月,工信部旗下泰尔实验室发布消息称,将在国内联合多家厂商制定安卓统一推送服务(Unified Push Service,简称UPS)技术标准,旨在为国内的消息推送服务建立统一的标准,为终端用户提供...

王练
2017/07/20
8K
105
工信部放大招:将统一 Android 消息推送标准

由于一些特殊的原因,在国内的用户无法享受到谷歌安卓系统提供的 GMS 消息推送服务,不少国产安卓软件接收消息依靠后台服务存在,也由此出现了用户反映的耗电以及占用内存问题,不过未来这一...

王练
2017/06/04
9.5K
51
中国安卓开发者大会

回首过往,展望未来,中国安卓生态已经逐渐步入成熟。基于“互联网+”的行业格局的迅速迭代,为开发者们提供了“大众创业,万众创新”的巨大机会,也成就了中国特有的安卓生态环境。但是,中...

个推
2018/06/29
357
0

没有更多内容

加载失败,请刷新页面

加载更多

可能是国内第一篇全面解读 Java 现状及趋势的文章

作者 | 张晓楠 Dragonwell JDK 最新版本 8.1.1-GA 发布,包括全新特性和更新! 导读:InfoQ 发布《2019 中国 Java 发展趋势报告》,反映 Java 在中国发展的独特性,同时也希望大家对 Java 有...

阿里云官方博客
12分钟前
2
0
Spring Boot 2.x基础教程:Swagger静态文档的生成

前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了。如果您还不熟悉这块,可以先阅读: Spring Boot 2.x基础教程...

程序猿DD
15分钟前
2
0
《毅力》读书笔记

1.确信你全身心地投入 2.准备好为目标进行艰难的跋涉 3.通过减少需要使用毅力的情形,为将来的挑战做好准备 4.尽可能具体细致地确定你的目标和实现目标的过程 5.把挑战分解为小而易于管理的小...

lingch
16分钟前
3
0
zk中快速选举FastLeaderElection实现

选举涉及概念 服务器状态 投票 如何选择投票? 协议 选举 如何进行选举? epoch 发送者 接收者 发送队列 接收队列 服务器状态 public enum ServerState { LOOKING,寻找Leader状态,当服务处于...

writeademo
19分钟前
2
0
教你玩转Linux—磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少...

Linux就该这么学
22分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部