zoukankan      html  css  js  c++  java
  • 消息推送之百度云推送Android集成与用法


    这两天因为项目须要。研究了一下百度云推送,本来这事没什么多大工作量的,但注冊百度开发人员账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路。

    好在我耗费了N多个毫毫秒秒后稀里哗啦的闯了过来。

    在此先吐槽一下。这个云推送尽管没多少东西,但对于初次接触的人来说还是有点不利索的,所以肯定要看官方文档。仅仅是不知是百度哪个哥们做的文档。pdf做的也太不地体贴了:英文字符里面居然有中文空格,拷贝到自己的项目中发现江山一片红,娘的。这猛一看还不一定能看得出来究竟是哪里出了错。

    for instance:


    what's wrong? ....

    如今也许能一眼望穿bug,但当血色迷蒙的时候是相当有蛋碎的快感的。


    以下開始集成。

    先介绍用法以便爽一把

    一:用法

    1.打开管理控制台,找到自己创建的project

      http://developer.baidu.com/console#app/project


    2:选择云推送---通知:

     

    注:用户范围:

    全部人是向全部安装这一app的用户发送通知

    广播组可依据标签向特定用户发送通知

     

    3:手机界面:

     

    二:集成方法:

    1.清单文件的配置

    ①:加权限

         <!-- Push service 执行须要的权限 -->

         <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.RECEIVE_BOOT_COMPLETED" />

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

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

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

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

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

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

    <!-- Push service 执行须要的权限 -->

    ②:注冊消息接收的receiver

             <receiver android:name="com.zhuim.sgghealth.MyPushMessageReceiver" >

                 <intent-filter>

                     <!-- 接收push消息 -->

                     <action android:name="com.baidu.android.pushservice.action.MESSAGE" />

                    <!-- 接收bind、setTags等method的返回结果 -->

                    <action android:name="com.baidu.android.pushservice.action.RECEIVE" />

                    <!-- 可选。接受通知点击事件,和通知自己定义内容 -->

                    <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />

                </intent-filter>

            </receiver>

     

            <!-- 用于接收系统消息以保证PushService正常执行 -->

            <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>

            <!-- Push服务接收client发送的各种请求 -->

            <!-- 注意:RegistrationReceiver 在2.1.1及之前版本号有拼写失误,为RegistratonReceiver ,用新版本号SDK时请更改为例如以下代码 -->

            <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>

            <!-- Push 服务 -->

            <service

                android:name="com.baidu.android.pushservice.PushService"

                android:exported="true"

                android:process=":bdservice_v1" />

            <!-- AndroidMenifest.xml添加pushservice配置 -->

     

    2:代码文件:

    ①:让推送功能起作用

    在自己的主Activity中增加以下代码,让推送功能開始工作:

    // 以apikey的方式登录。一般放在主Activity的onCreate中

    PushManager.startWork(getApplicationContext(),

    PushConstants.LOGIN_TYPE_API_KEY"bYI*********************zLi3qLk");

    当中的apikey是自己project的创建时赋予的:

     

    ②:继承FrontiaApplication

    public class MyApp extends FrontiaApplication {

    public List<Activity> activitiesList;

    @Override

    public void onCreate() {

    // TODO Auto-generated method stub

    activitiesList = new ArrayList<Activity>();

    super.onCreate();

    }

    }

    ③:自己定义广播接收者:

    public class MyPushMessageReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(final Context context, Intent intent) {

    if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {

    // 获取消息内容

    String message = intent.getExtras().getString(

    PushConstants.EXTRA_PUSH_MESSAGE_STRING);

    else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) {

    // 处理绑定等方法的返回数据

    // PushManager.startWork()的返回值通过PushConstants.METHOD_BIND得到

    final String method = intent.getStringExtra(PushConstants.EXTRA_METHOD);

    // 方法返回错误码。若绑定返回错误(非0)。则应用将不能正常接收消息。

    // 绑定失败的原因有多种,如网络原因。或access token过期。

    // 请不要在出错时进行简单的startWork调用。这有可能导致死循环。

    // 能够通过限制重试次数,或者在其它时机又一次调用来解决。

    int errorCode = intent.getIntExtra(PushConstants.EXTRA_ERROR_CODE,PushConstants.ERROR_SUCCESS);

    String content = "";

    if (intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT) != null)

    content = new String(intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT));

    // 用户在此自己定义处理消息:TODO Something

    // 通知用户点击事件处理

    else if (intent.getAction().equals(

    PushConstants.ACTION_RECEIVER_NOTIFICATION_CLICK)) {

    String title = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_TITLE);

    String content = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT);

    // 用户在此自己定义处理点击事件:TODO Something

    }

    }

    }

    ④:导入百度云推送所须要的jar包及so文件:

     libs下导入pushservice-3.2.0.jaradd to build path

     libs/armeabi下导入libbdpush_V1_0.so


  • 相关阅读:
    ABP PUT、DELETE请求错误405.0
    Visual Studio Code 通过 Chrome插件Type Script断点调试Angular 2
    Angular 报错 Can't bind to 'formGroup' since it isn't a known property of 'form'
    ABP 用swagger UI测试API报401无权限访问问题
    ABP .Net Core API和Angular前端APP集成部署
    ABP .Net Core API和Angular前端APP独立部署跨域问题(No Access-Control-Allow-Origin)
    Hosts文件实际应用 配置内部服务器提高访问效率和速度
    mysql-proxy实现读写分离
    mysql主从复制-linux版本
    nginx作反向代理,实现负载均衡
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6901915.html
Copyright © 2011-2022 走看看