体验个推推送,感受Android推送的魅力
2015-05-14 10:49
309 查看
原博客转自:/article/2530520.html
消息推送在android应用中已经不胜枚举,足以体现它的重要性。今天我来和大家一起学习一下目前最主流的推送之一 - 个推推送 。
1,我们先在个推官网注册一个自己的账号,然后在应用管理里登记自己的应用(应用标识记得填自己项目的packageName),拿到AppID,AppKey,AppSecret,MasterSecret(我们在后面需要用到这些)。
请见图:
2,之后我们在接入向导里下载个推的SDK(GETUI_ANDROID_SDK),解压发现API文档,Demo工程,资源文件。
请见图:
3,将资源文件导入我们工程的lib中。
请见图:
4,在AndroidManifest.xml 中加入声明服务
[html] view
plaincopy
<pre name="code" class="html" style="color: rgb(35, 35, 35); font-size: 14px; line-height: 25px;"> <!-- 个推SDK配置开始 -->
<!-- 配置的第三方参数属性 -->
<meta-data
android:name="PUSH_APPID"
android:value="dKHYjw6bxB7VuuMp7n9uM9" /> <!-- APPID -->
<meta-data
android:name="PUSH_APPKEY"
android:value="PesVQ3QhydATvduzLsj8E5" /> <!-- APPKEY -->
<meta-data
android:name="PUSH_APPSECRET"
android:value="CsJEgWLA5Z5wxkdiZjkVR2" /> <!-- APPSECRET -->
<meta-data
android:name="PUSH_GROUPID"
android:value="" /><span style="font-family: 'Microsoft Yahei', 宋体, 黑体;"><!-- 这里可以不填 --></span>
<service
android:name="com.igexin.sdk.PushService"
android:exported="true"
android:label="NotificationCenter"
android:process=":pushservice" >
</service>
<receiver android:name="com.igexin.sdk.PushReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="com.igexin.sdk.action.refreshls" />
</intent-filter>
</receiver>
<receiver
android:name="com.igexin.sdk.PushManagerReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.igexin.sdk.action.pushmanager" />
</intent-filter>
</receiver>
<activity
android:name="com.igexin.sdk.PushActivity"
android:excludeFromRecents="true"
android:exported="false"
android:process=":pushservice"
android:taskAffinity="com.igexin.sdk.PushActivityTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<!-- 配置弹框activity -->
<activity
android:name="com.igexin.getuiext.activity.GetuiExtActivity"
android:configChanges="orientation|keyboard|keyboardHidden"
android:excludeFromRecents="true"
android:exported="false"
android:process=":pushservice"
android:taskAffinity="android.task.myServicetask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<receiver
android:name="com.igexin.getuiext.service.PayloadReceiver"
android:exported="false" >
<intent-filter>
<!-- 这个com.igexin.sdk.action.7fjUl2Z3LH6xYy7NQK4ni4固定,不能修改 -->
<action android:name="com.igexin.sdk.action.7fjUl2Z3LH6xYy7NQK4ni4" />
<!-- android:name="com.igexin.sdk.action.第三方的appId" -->
<action android:name="com.igexin.sdk.action.dKHYjw6bxB7VuuMp7n9uM9" />
</intent-filter>
</receiver>
<service
android:name="com.igexin.getuiext.service.GetuiExtService"
android:process=":pushservice" />
<!-- 个推download模块配置 -->
<service
android:name="com.igexin.download.DownloadService"
android:process=":pushservice" />
<receiver android:name="com.igexin.download.DownloadReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver<span style="font-family: 'Microsoft Yahei', 宋体, 黑体;">></span>
[html] view
plaincopy
<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
<provider
android:name="com.igexin.download.DownloadProvider"
android:authorities="downloads.com.dengyy.pushtest"
android:process=":pushservice" />
[html] view
plaincopy
<!-- 透传消息Receiver -->
<receiver
android:name="com.dengyy.pushtest.PushDemoReceiver"
android:exported="false" >
<intent-filter>
<!-- action android:name="com.igexin.sdk.action.第三方的APPID" -->
<action android:name="com.igexin.sdk.action.dKHYjw6bxB7VuuMp7n9uM9" />
</intent-filter>
</receiver>
5,加入权限
[html] view
plaincopy
<!-- 个推权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="getui.permission.GetuiService" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- 自定义权限 -->
<permission
android:name="getui.permission.GetuiService"
android:protectionLevel="normal" >
</permission>
6,之后我们在MainActivity里启动初始化SDK。
[java] view
plaincopy
package com.dengyy.pushtest;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.widget.TextView;
import com.igexin.sdk.PushManager;
public class MainActivity extends Activity {
public static TextView tView = null;
public static TextView tLogView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//初始化SDK
PushManager.getInstance().initialize(this.getApplicationContext());
}
}
注意:PushManager.getInstance().initialize(this.getApplicationContext()) 一般在Activity或Service类内调用,可以在Activity的onCreate()方法中调用。不建议在Application继承类中调用。
7,将官方Demo里PushDemoReceiver类复制到自己的项目中
以下是我加入了一些容易理解的注释的代码:
[java] view
plaincopy
package com.dengyy.pushtest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.igexin.sdk.PushConsts;
import com.igexin.sdk.PushManager;
public class PushDemoReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Log.d("GetuiSdkDemo", "onReceive() action=" + bundle.getInt("action"));
switch (bundle.getInt(PushConsts.CMD_ACTION)) {
case PushConsts.GET_MSG_DATA:
// 获取透传数据
// String appid = bundle.getString("appid");
byte[] payload = bundle.getByteArray("payload");
String taskid = bundle.getString("taskid");
String messageid = bundle.getString("messageid");
// smartPush第三方回执调用接口,actionid范围为90000-90999,可根据业务场景执行
// 透传消息,根据事件id改变事件
boolean result = PushManager.getInstance().sendFeedbackMessage(
context, taskid, messageid, 90001);
if(result){
Intent intentTemp = new Intent(context.getApplicationContext(),ResultActivity.class);
intentTemp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.getApplicationContext().startActivity(intentTemp);
}
if (payload != null) {
String data = new String(payload);
Log.d("GetuiSdkDemo", "Got Payload:" + data);
if (MainActivity.tLogView != null)
MainActivity.tLogView.append(data + "\n");
}
break;
case PushConsts.GET_CLIENTID:
// 获取ClientID(CID)
// 第三方应用需要将CID上传到第三方服务器,并且将当前用户帐号和CID进行关联,以便日后通过用户帐号查找CID进行消息推送
String cid = bundle.getString("clientid");
if (MainActivity.tView != null)
MainActivity.tView.setText(cid);
break;
case PushConsts.THIRDPART_FEEDBACK:
/*
* String appid = bundle.getString("appid"); String taskid =
* bundle.getString("taskid"); String actionid =
* bundle.getString("actionid"); String result =
* bundle.getString("result"); long timestamp =
* bundle.getLong("timestamp");
*
* Log.d("GetuiSdkDemo", "appid = " + appid); Log.d("GetuiSdkDemo",
* "taskid = " + taskid); Log.d("GetuiSdkDemo", "actionid = " +
* actionid); Log.d("GetuiSdkDemo", "result = " + result);
* Log.d("GetuiSdkDemo", "timestamp = " + timestamp);
*/
break;
default:
break;
}
}
}
8,到了这里,我们可以开始测试了。让消息飞起来吧!
我们依次点击,运行结果如下:
除此之外,我们还可以自定义消息推送,试试看吧
我的Demo代码可以点这里下载:https://github.com/toeii/GeTuiPushDemo
消息推送在android应用中已经不胜枚举,足以体现它的重要性。今天我来和大家一起学习一下目前最主流的推送之一 - 个推推送 。
1,我们先在个推官网注册一个自己的账号,然后在应用管理里登记自己的应用(应用标识记得填自己项目的packageName),拿到AppID,AppKey,AppSecret,MasterSecret(我们在后面需要用到这些)。
请见图:
2,之后我们在接入向导里下载个推的SDK(GETUI_ANDROID_SDK),解压发现API文档,Demo工程,资源文件。
请见图:
3,将资源文件导入我们工程的lib中。
请见图:
4,在AndroidManifest.xml 中加入声明服务
[html] view
plaincopy
<pre name="code" class="html" style="color: rgb(35, 35, 35); font-size: 14px; line-height: 25px;"> <!-- 个推SDK配置开始 -->
<!-- 配置的第三方参数属性 -->
<meta-data
android:name="PUSH_APPID"
android:value="dKHYjw6bxB7VuuMp7n9uM9" /> <!-- APPID -->
<meta-data
android:name="PUSH_APPKEY"
android:value="PesVQ3QhydATvduzLsj8E5" /> <!-- APPKEY -->
<meta-data
android:name="PUSH_APPSECRET"
android:value="CsJEgWLA5Z5wxkdiZjkVR2" /> <!-- APPSECRET -->
<meta-data
android:name="PUSH_GROUPID"
android:value="" /><span style="font-family: 'Microsoft Yahei', 宋体, 黑体;"><!-- 这里可以不填 --></span>
<service
android:name="com.igexin.sdk.PushService"
android:exported="true"
android:label="NotificationCenter"
android:process=":pushservice" >
</service>
<receiver android:name="com.igexin.sdk.PushReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="com.igexin.sdk.action.refreshls" />
</intent-filter>
</receiver>
<receiver
android:name="com.igexin.sdk.PushManagerReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.igexin.sdk.action.pushmanager" />
</intent-filter>
</receiver>
<activity
android:name="com.igexin.sdk.PushActivity"
android:excludeFromRecents="true"
android:exported="false"
android:process=":pushservice"
android:taskAffinity="com.igexin.sdk.PushActivityTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<!-- 配置弹框activity -->
<activity
android:name="com.igexin.getuiext.activity.GetuiExtActivity"
android:configChanges="orientation|keyboard|keyboardHidden"
android:excludeFromRecents="true"
android:exported="false"
android:process=":pushservice"
android:taskAffinity="android.task.myServicetask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<receiver
android:name="com.igexin.getuiext.service.PayloadReceiver"
android:exported="false" >
<intent-filter>
<!-- 这个com.igexin.sdk.action.7fjUl2Z3LH6xYy7NQK4ni4固定,不能修改 -->
<action android:name="com.igexin.sdk.action.7fjUl2Z3LH6xYy7NQK4ni4" />
<!-- android:name="com.igexin.sdk.action.第三方的appId" -->
<action android:name="com.igexin.sdk.action.dKHYjw6bxB7VuuMp7n9uM9" />
</intent-filter>
</receiver>
<service
android:name="com.igexin.getuiext.service.GetuiExtService"
android:process=":pushservice" />
<!-- 个推download模块配置 -->
<service
android:name="com.igexin.download.DownloadService"
android:process=":pushservice" />
<receiver android:name="com.igexin.download.DownloadReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver<span style="font-family: 'Microsoft Yahei', 宋体, 黑体;">></span>
[html] view
plaincopy
<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
<provider
android:name="com.igexin.download.DownloadProvider"
android:authorities="downloads.com.dengyy.pushtest"
android:process=":pushservice" />
[html] view
plaincopy
<!-- 透传消息Receiver -->
<receiver
android:name="com.dengyy.pushtest.PushDemoReceiver"
android:exported="false" >
<intent-filter>
<!-- action android:name="com.igexin.sdk.action.第三方的APPID" -->
<action android:name="com.igexin.sdk.action.dKHYjw6bxB7VuuMp7n9uM9" />
</intent-filter>
</receiver>
5,加入权限
[html] view
plaincopy
<!-- 个推权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="getui.permission.GetuiService" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- 自定义权限 -->
<permission
android:name="getui.permission.GetuiService"
android:protectionLevel="normal" >
</permission>
6,之后我们在MainActivity里启动初始化SDK。
[java] view
plaincopy
package com.dengyy.pushtest;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.widget.TextView;
import com.igexin.sdk.PushManager;
public class MainActivity extends Activity {
public static TextView tView = null;
public static TextView tLogView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//初始化SDK
PushManager.getInstance().initialize(this.getApplicationContext());
}
}
注意:PushManager.getInstance().initialize(this.getApplicationContext()) 一般在Activity或Service类内调用,可以在Activity的onCreate()方法中调用。不建议在Application继承类中调用。
7,将官方Demo里PushDemoReceiver类复制到自己的项目中
以下是我加入了一些容易理解的注释的代码:
[java] view
plaincopy
package com.dengyy.pushtest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.igexin.sdk.PushConsts;
import com.igexin.sdk.PushManager;
public class PushDemoReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Log.d("GetuiSdkDemo", "onReceive() action=" + bundle.getInt("action"));
switch (bundle.getInt(PushConsts.CMD_ACTION)) {
case PushConsts.GET_MSG_DATA:
// 获取透传数据
// String appid = bundle.getString("appid");
byte[] payload = bundle.getByteArray("payload");
String taskid = bundle.getString("taskid");
String messageid = bundle.getString("messageid");
// smartPush第三方回执调用接口,actionid范围为90000-90999,可根据业务场景执行
// 透传消息,根据事件id改变事件
boolean result = PushManager.getInstance().sendFeedbackMessage(
context, taskid, messageid, 90001);
if(result){
Intent intentTemp = new Intent(context.getApplicationContext(),ResultActivity.class);
intentTemp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.getApplicationContext().startActivity(intentTemp);
}
if (payload != null) {
String data = new String(payload);
Log.d("GetuiSdkDemo", "Got Payload:" + data);
if (MainActivity.tLogView != null)
MainActivity.tLogView.append(data + "\n");
}
break;
case PushConsts.GET_CLIENTID:
// 获取ClientID(CID)
// 第三方应用需要将CID上传到第三方服务器,并且将当前用户帐号和CID进行关联,以便日后通过用户帐号查找CID进行消息推送
String cid = bundle.getString("clientid");
if (MainActivity.tView != null)
MainActivity.tView.setText(cid);
break;
case PushConsts.THIRDPART_FEEDBACK:
/*
* String appid = bundle.getString("appid"); String taskid =
* bundle.getString("taskid"); String actionid =
* bundle.getString("actionid"); String result =
* bundle.getString("result"); long timestamp =
* bundle.getLong("timestamp");
*
* Log.d("GetuiSdkDemo", "appid = " + appid); Log.d("GetuiSdkDemo",
* "taskid = " + taskid); Log.d("GetuiSdkDemo", "actionid = " +
* actionid); Log.d("GetuiSdkDemo", "result = " + result);
* Log.d("GetuiSdkDemo", "timestamp = " + timestamp);
*/
break;
default:
break;
}
}
}
8,到了这里,我们可以开始测试了。让消息飞起来吧!
我们依次点击,运行结果如下:
除此之外,我们还可以自定义消息推送,试试看吧
我的Demo代码可以点这里下载:https://github.com/toeii/GeTuiPushDemo
相关文章推荐
- 体验个推推送,感受Android推送的魅力
- 想抢先体验Android操作系统的魅力吗?那就使用Android LiveCD吧!
- 想抢先体验Android操作系统的魅力吗?那就使用Android LiveCD吧!
- 消息推送如何平推推送和用户体验
- 想抢先体验Android操作系统的魅力吗?那就使用Android LiveCD吧
- 想抢先体验Android操作系统的魅力吗?那就使用Android LiveCD吧!
- 如何在电脑上体验Android系统之魅力?
- 消息推送如何平推推送和用户体验
- 想抢先体验Android操作系统的魅力吗?那就使用Android LiveCD吧!
- 想抢先体验Android操作系统的魅力吗?那就使用Android LiveCD吧
- 用Android LiveCD体验Android 操作系统的魅力
- 想抢先体验Android操作系统的魅力吗?那就使用Android LiveCD吧!
- 感受Android系统的魅力
- 感受Android系统的魅力
- 想抢先体验Android操作系统的魅力吗?那就使用Android LiveCD吧
- 搭建Android MQTT推送平台
- android中消息推送机制《转载》
- Mosquitto搭建Android推送服务(二)Mosquitto简介及搭建
- Android推送通知指南
- Android消息推送机制