百度推送--搭架子

准备工作

--百度开发者账号 http://developer.baidu.com/cloud/push

--接入移动应用 http://developer.baidu.com/console#app/mobile,获取API Key

--获取sdk  http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/sdk/clientsdk,得到pushservice-4.1.0.jar和demo

下面开始在自己的项目中,加入百度推送代码(需要粘贴的东西上demo中找)

1、导入pushservice的jar包和你的项目需要的so包,build path

2、把项目的application继承百度的com.baidu.frontia.FrontiaApplication.分两种情况(注意:每个项目只有一个Application子类)

如果工程中已经有了Application的继承类,那么,您需要将父类改为com.baidu.frontia.FrontiaApplication,onCreate()方法一定要super.onCreate();
如果您没有实现Application的继承类,那么,请在AndroidManifest.xml的Application标签中增加
name属性:

 <application android:name="com.baidu.frontia.FrontiaApplication"...

3、在mainfest中加入Push service 运行需要的权限 

    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

在<application>标签下加入子标签,value值为接入应用获取的api key

 <!-- 百度推送 -->
        <meta-data android:name="api_key" android:value="88888888888888888888888888" />

4、在工程中新建baidupush包,把demo中的Utils类复制过来,该类包含这么几个工具方法

--    // 获取ApiKey,88888888888888888888888888
    public static String getMetaValue(Context context, String metaKey) {}

--    // 推送服务是否已经绑定的标记,如果已经绑定,不必重复开启推送服务
    public static boolean hasBind(Context context) {}

5、开启百度推送服务

分两种方式:1、使用百度账号登录后,开启推送服务。这种方式参见demo和用户手册。

2、不使用百度账号,开启推送服务。开启之后,虽然没有百度账号,但每个设备上的应用会生成userId,这样来进行推送服务,下面以此为例

在项目主框Activity(比如,MainActivity)的onCreate()方法中

		if (!Utils.hasBind(getApplicationContext())) {
			//不使用百度登录账号体系开启百度推送服务
			PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY,Utils.getMetaValue(MainFrameBasicActivity.this, "api_key"));
            // Push: 如果想基于地理位置推送,可以打开支持地理位置的推送的开关
            // PushManager.enableLbs(getApplicationContext());
		}
		
		// Push: 设置自定义的通知样式,具体API介绍见用户手册,如果想使用系统默认的可以不加这段代码
        // 请在通知推送界面中,高级设置->通知栏样式->自定义样式,填写值:1,
        // 与下方代码中 PushManager.setNotificationBuilder(this, 1, cBuilder)中的第二个参数对应
        CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder(
                getApplicationContext(), resource.getIdentifier(
                        "notification_custom_builder", "layout", pkgName),
                resource.getIdentifier("notification_icon", "id", pkgName),
                resource.getIdentifier("notification_title", "id", pkgName),
                resource.getIdentifier("notification_text", "id", pkgName));
        cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL);
        cBuilder.setNotificationDefaults(Notification.DEFAULT_SOUND
                | Notification.DEFAULT_VIBRATE);
        cBuilder.setStatusbarIcon(this.getApplicationInfo().icon);
        cBuilder.setLayoutDrawable(resource.getIdentifier(
                "simple_notification_icon", "drawable", pkgName));
        PushManager.setNotificationBuilder(this, 1, cBuilder);

上面的PushManager.startWork();开启了推送服务,CustomPushNotificationBuilder一段代码定义了通知的样式,需要创建相应的资源文件,包括notification_custom_builder.xml和一些图片、字符串资源,参考demo创建自己的通知样式。

6、消息处理receiver

上面开启了推送服务,接下来接受后台推送的信息,并做相应处理。新建MyPushMessageReceiver继承 com.baidu.frontia.api.FrontiaPushMessageReceiver,重写其抽象方法。在mainfest中进行声明

         <!-- 推送服务的客户端,即接收端 -->
        <receiver android:name=".MyPushMessageReceiver">
            
            <intent-filter>
                <!-- 接收push消息 -->
                <action android:name="com.baidu.android.pushservice.action.MESSAGE" />
                <!-- 接收bind,unbind,fetch,delete等反馈消息 -->
                <action android:name="com.baidu.android.pushservice.action.RECEIVE" />
                <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
            </intent-filter>
        </receiver> 
还有用百度推送必须的receviver和service声明,下面两个receiver和一个service是百度jar包里的类,声明原封不动粘上

        <receiver android:name="com.baidu.android.pushservice.PushServiceReceiver"
            android:process=":bdservice_v1">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
                <action android:name="com.baidu.android.pushservice.action.media.CLICK" />
            </intent-filter>
        </receiver>
        <receiver android:name="com.baidu.android.pushservice.RegistrationReceiver"
            android:process=":bdservice_v1">
            <intent-filter>
                <action android:name="com.baidu.android.pushservice.action.METHOD" />
                <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED"/>
                <data android:scheme="package" />
            </intent-filter>                   
        </receiver>
        <service
            android:name="com.baidu.android.pushservice.PushService"
            android:exported="true"
            android:process=":bdservice_v1"  >
            <intent-filter>
                <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />
            </intent-filter>
        </service>
        <!-- push结束 -->

调用PushManager.startWork后,发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。如果您需要用单播推送,需要把这里获取的channel id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。

---onBind(),用来处理启动服务startWork()的返回值,0是成功,绑定成功后把绑定标记置为true,Utils.setBind(context, true);

后台推送的消息分为两种,用户可见、不可见,即推送通知、推送透传
--onNotificationClicked(),用户点击通知后,执行该方法代码
--onMessage(),用户不可见,服务器透传消息过来,在此方法中进行默默处理

--onUnbind(),PushManager.stopWork() 的回调函数。解除绑定Utils.setBind(context, false);

其他方法是tag相关操作的回调。

至此,推送的架子已经搭完,之后后台推数据,只需要在receiver的相关方法中进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值