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

本文详细介绍了如何在Android应用中集成并使用个推推送服务,包括注册账号、接入SDK、配置应用信息、初始化SDK及接收推送消息的流程。同时提供了Demo代码,帮助开发者快速上手。

原博客转自:http://blog.youkuaiyun.com/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 plain copy
  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 plain copy
  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 plain copy
  1.         <provider  
  2.             android:name="com.igexin.download.DownloadProvider"  
  3.             android:authorities="downloads.com.dengyy.pushtest"  
  4.             android:process=":pushservice" />  
[html]  view plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值