您的位置:首页 > 移动开发 > Android开发

体验个推推送,感受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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: