• 推送:腾迅信鸽 VS Bmob


    最近几天了解市场上主流的推送SDK。

    腾迅信鸽

    所需SDK,去官网自行下载。去下载

     完整的清单文件如下:

      1 <?xml version="1.0" encoding="utf-8"?>
      2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      3     package="你的包名"
      4     android:versionCode="1"
      5     android:versionName="1.0" >
      6 
      7     <uses-sdk
      8         android:minSdkVersion="8"
      9         android:targetSdkVersion="19" />
     10     <!-- 【必须】 信鸽SDK所需权限 -->
     11     <uses-permission android:name="android.permission.INTERNET" />
     12     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     13     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     14     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     15     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     16     <uses-permission android:name="android.permission.RESTART_PACKAGES" />
     17     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
     18     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     19     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
     20     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     21     <uses-permission android:name="android.permission.WAKE_LOCK" />
     22     <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
     23     <uses-permission android:name="android.permission.GET_TASKS" />
     24     <uses-permission android:name="android.permission.READ_LOGS" />
     25     <uses-permission android:name="android.permission.VIBRATE" />
     26     <!-- 【可选】 信鸽SDK所需权限 -->
     27     <uses-permission android:name="android.permission.BLUETOOTH" />
     28     <uses-permission android:name="android.permission.BATTERY_STATS" />
     29 
     30     <application
     31         android:allowBackup="true"
     32         android:icon="@drawable/ic_launcher"
     33         android:label="@string/app_name"
     34         android:theme="@style/AppTheme" >
     35         <activity
     36             android:name="你的包名.MainActivity"
     37             android:label="@string/app_name" >
     38             <intent-filter>
     39                 <action android:name="android.intent.action.MAIN" />
     40 
     41                 <category android:name="android.intent.category.LAUNCHER" />
     42             </intent-filter>
     43         </activity>
     44         <!-- 【必须】 信鸽receiver广播接收 -->
     45         <receiver
     46             android:name="com.tencent.android.tpush.XGPushReceiver"
     47             android:process=":xg_service_v2" >
     48             <intent-filter android:priority="0x7fffffff" >
     49 
     50                 <!-- 【必须】 信鸽SDK的内部广播 -->
     51                 <action android:name="com.tencent.android.tpush.action.SDK" />
     52                 <action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
     53                 <!-- 【必须】 系统广播:开屏和网络切换 -->
     54                 <action android:name="android.intent.action.USER_PRESENT" />
     55                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
     56 
     57                 <!-- 【可选】 一些常用的系统广播,增强信鸽service的复活机会,请根据需要选择。当然,你也可以添加APP自定义的一些广播让启动service -->
     58                 <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
     59                 <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
     60                 <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
     61             </intent-filter>
     62             <!-- 【可选】 usb相关的系统广播,增强信鸽service的复活机会,请根据需要添加 -->
     63             <intent-filter android:priority="0x7fffffff" >
     64                 <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
     65                 <action android:name="android.intent.action.MEDIA_REMOVED" />
     66                 <action android:name="android.intent.action.MEDIA_CHECKING" />
     67                 <action android:name="android.intent.action.MEDIA_EJECT" />
     68 
     69                 <data android:scheme="file" />
     70             </intent-filter>
     71         </receiver>
     72 
     73         <!-- 【必须】 (2.30及以上版新增)展示通知的activity -->
     74         <!-- 【注意】 如果被打开的activity是启动模式为SingleTop,SingleTask或SingleInstance,请根据通知的异常自查列表第8点处理 -->
     75         <activity
     76             android:name="com.tencent.android.tpush.XGPushActivity"
     77             android:exported="true" >
     78             <intent-filter>
     79 
     80                 <!-- 若使用AndroidStudio,请设置android:name="android.intent.action" -->
     81                 <action android:name="" />
     82             </intent-filter>
     83         </activity>
     84 
     85         <!-- 【必须】 信鸽service -->
     86         <service
     87             android:name="com.tencent.android.tpush.service.XGPushService"
     88             android:exported="true"
     89             android:persistent="true"
     90             android:process=":xg_service_v2" />
     91 
     92         <!-- 【必须】 通知service,此选项有助于提高抵达率 -->
     93         <service
     94             android:name="com.tencent.android.tpush.rpc.XGRemoteService"
     95             android:exported="true" >
     96             <intent-filter>
     97                 <action android:name="你的包名.PUSH_ACTION" />
     98             </intent-filter>
     99         </service>
    100 
    101         <!-- 【必须】 请将YOUR_ACCESS_ID修改为APP的AccessId,“21”开头的10位数字,中间没空格 -->
    102         <meta-data
    103             android:name="XG_V2_ACCESS_ID"
    104             android:value="你的ACCESS_ID" />
    105         <!-- 【必须】 请将YOUR_ACCESS_KEY修改为APP的AccessKey,“A”开头的12位字符串,中间没空格 -->
    106         <meta-data
    107             android:name="XG_V2_ACCESS_KEY"
    108             android:value="你的ACCESS_KEY" />
    109     </application>
    110 
    111 </manifest>
    View Code

    MainActivity中配置如下:

    1     @Override
    2     protected void onCreate(Bundle savedInstanceState) {
    3         super.onCreate(savedInstanceState);
    4         setContentView(R.layout.activity_main);
    5         XGPushManager.registerPush(this);
    6         // // 2.36(不包括)之前的版本需要调用以下2行代码
    7         // Intent service = new Intent(this, XGPushService.class);
    8         // startService(service);
    9     }
    View Code

    相当Easy吧,如果过程无误,就可以正常推送了。

    Bmob

    Bmob配置过程相对信鸽来说稍微复杂一点,缺点就是需要自己在自定义Receiver里接收推送消息,自己发送通知,但可定制性也较强。 

    所需SDK,去官网自行下载。去下载

     完整的清单文件如下:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="你的包名"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="8"
     9         android:targetSdkVersion="19" />
    10 
    11     <!-- BmobPush SDK权限 -->
    12     <permission
    13         android:name="cn.bmob.permission.push"
    14         android:protectionLevel="normal" >
    15     </permission>
    16 
    17     <uses-permission android:name="cn.bmob.permission.push" /> <!-- 添加自定义的权限 -->
    18     <uses-permission android:name="android.permission.READ_LOGS" />
    19     <uses-permission android:name="android.permission.INTERNET" />
    20     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    21     <uses-permission android:name="android.permission.WAKE_LOCK" />
    22     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    23     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    24     <uses-permission android:name="android.permission.VIBRATE" />
    25     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    26     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    27     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    28 
    29     <application
    30         android:allowBackup="true"
    31         android:icon="@drawable/ic_launcher"
    32         android:label="@string/app_name"
    33         android:theme="@style/AppTheme" >
    34         <activity
    35             android:name="你的包名.MainActivity"
    36             android:label="@string/app_name"
    37             android:launchMode="singleTop" >
    38             <intent-filter>
    39                 <action android:name="android.intent.action.MAIN" />
    40 
    41                 <category android:name="android.intent.category.LAUNCHER" />
    42             </intent-filter>
    43         </activity>
    44 
    45         <service
    46             android:name="cn.bmob.push.lib.service.PushService"
    47             android:exported="true"
    48             android:label="PushService"
    49             android:permission="cn.bmob.permission.push"
    50             android:process="cn.bmob.push" >
    51             <intent-filter>
    52                 <action android:name="cn.bmob.push.lib.service.PushService" />
    53             </intent-filter>
    54         </service>
    55 
    56         <receiver android:name="cn.bmob.push.PushReceiver" >
    57             <intent-filter android:priority="2147483647" > <!-- 优先级加最高 -->
    58                 <!-- 系统启动完成后会调用 -->
    59                 <action android:name="android.intent.action.BOOT_COMPLETED" />
    60                 <!-- 解锁完成后会调用 -->
    61                 <action android:name="android.intent.action.USER_PRESENT" />
    62                 <!-- 监听网络连通性 -->
    63                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    64             </intent-filter>
    65         </receiver>
    66         <!-- 第四部中创建的消息接收器,在这里进行注册 -->
    67         <receiver android:name="你的包名.MyPushMessageReceiver" >
    68             <intent-filter>
    69                 <action android:name="cn.bmob.push.action.MESSAGE" />
    70             </intent-filter>
    71         </receiver>
    72     </application>
    73 
    74 </manifest>
    View Code

    MainActivity中配置如下:

    1  // 初始化BmobSDK
    2     Bmob.initialize(this, "你的AppKey");
    3     // 使用推送服务时的初始化操作
    4     BmobInstallation.getCurrentInstallation(this).save();
    5     // 启动推送服务
    6     BmobPush.startWork(this, "你的AppKey");
    View Code

     MyPushMessageReceiver完整代码如下:

     1 public class MyPushMessageReceiver extends BroadcastReceiver {
     2 
     3     private Context mContext;
     4 
     5     @Override
     6     public void onReceive(Context context, Intent intent) {
     7         mContext = context;
     8         if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {
     9             String jsonstr = intent
    10                     .getStringExtra(PushConstants.EXTRA_PUSH_MESSAGE_STRING);
    11             String msg = "";
    12             try {
    13                 JSONObject object = new JSONObject(jsonstr);
    14                 msg = object.getString("alert");
    15             } catch (JSONException e) {
    16                 e.printStackTrace();
    17             }
    18 
    19             SendNotification(msg);
    20         }
    21     }
    22 
    23     /**
    24      * 发送通知
    25      * 
    26      * @param message
    27      */
    28     @SuppressWarnings("deprecation")
    29     private void SendNotification(String message) {
    30         // 点击之后执行的Intent
    31         Intent intent = new Intent(mContext, MainActivity.class);
    32         PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0,
    33                 intent, 0);
    34         Notification notification = new Notification();
    35         notification.icon = R.drawable.ic_launcher;
    36         notification.tickerText = "收到消息推送";
    37         notification.when = System.currentTimeMillis();
    38         notification.defaults = Notification.DEFAULT_SOUND
    39                 | Notification.DEFAULT_VIBRATE;// 设置默认为系统声音
    40         notification.flags = Notification.FLAG_AUTO_CANCEL;// 点击后自动消失
    41         notification.setLatestEventInfo(mContext, "推送消息", message,
    42                 pendingIntent);
    43         NotificationManager mManager = (NotificationManager) mContext
    44                 .getSystemService(Context.NOTIFICATION_SERVICE);
    45         mManager.notify(1, notification);
    46 
    47     }
    48 }
    View Code
  • 相关阅读:
    [Ljava.lang.String; cannot be cast to java.lang.String 报错的原因
    ajaxfileupload多文件上传
    如何设置 html 中 select 标签不可编辑、只读
    docker
    nvm use 指定版本后无效 win7
    win7禁用Adnimistrator账号登录
    win10安装tomcat9
    webstorm命令行无法使用node-gyp进行编译
    tomcat7.0安装笔记
    win10 java1.7安装笔记
  • 原文地址:https://www.cnblogs.com/lavalike/p/4991172.html
Copyright © 2020-2023  润新知