久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android推送 百度云推送 入門篇

 dmw_zgl 2015-03-11

轉(zhuǎn)載請標明出處:http://blog.csdn.net/lmj623565791/article/details/27231237

現(xiàn)在app基本都有推送的功能,于是看了下百度云的推送,,官方文檔和Demo都很到位,,記錄下使用過程,,目標是利用百度云推送最為服務器寫個及時通訊的例子~當然了,這是第一篇入門~

1,、第一步就是在百度開發(fā)者服務管理中創(chuàng)建項目,,然后拿到API key , Secret Key ;這個過程就不多說了,上官網(wǎng)直接申請就行,,不復雜,。


2、下載云推送的客戶端SDK,,SDK的壓縮文件中包含一個例子代碼,,一個用戶手冊,和所需的libs和資源等(其實直接看用戶手冊和Demo基本就沒問題了),。



3,、準備工作結(jié)束,接下來,,我們就直接開始新建項目測試

a,、新建一個項目,然后把SDK中的libs中的jar和so文件夾拷貝到新建的項目中去


b,、將manifest中的application的name設置為:com.baidu.frontia.FrontiaApplication

  1. <application  
  2.      android:name="com.baidu.frontia.FrontiaApplication"  
  3.      android:allowBackup="true"  
  4.      android:icon="@drawable/ic_launcher"  
  5.      android:label="@string/app_name"  
  6.      android:theme="@style/AppTheme" >  

如果你的項目需要自定義Application,,請參考用戶手冊中的相關配置。

c,、添加權(quán)限

  1. <uses-permission android:name="android.permission.INTERNET" />  
  2.    <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  3.    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  4.    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  
  5.    <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  6.    <uses-permission android:name="android.permission.VIBRATE" />  
  7.    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  8.    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />  
  9.    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  10.    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  

d,、添加兩個receiver和一個Service(注釋標明了用處)

  1. <!-- push service start -->  
  2.        <!-- 用于接收系統(tǒng)消息以保證PushService正常運行 -->  
  3.        <receiver  
  4.            android:name="com.baidu.android.pushservice.PushServiceReceiver"  
  5.            android:process=":bdservice_v1" >  
  6.            <intent-filter>  
  7.                <action android:name="android.intent.action.BOOT_COMPLETED" />  
  8.                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  
  9.                <action android:name="com.baidu.android.pushservice.action.notification.SHOW" />  
  10.                <action android:name="com.baidu.android.pushservice.action.media.CLICK" />  
  11.            </intent-filter>  
  12.        </receiver>  
  13.        <!-- Push服務接收客戶端發(fā)送的各種請求 -->  
  14.        <!-- 注意:RegistrationReceiver 在2.1.1及之前版本有拼寫失誤,為RegistratonReceiver ,,用新版本SDK時請更改為如下代碼 -->  
  15.        <receiver  
  16.            android:name="com.baidu.android.pushservice.RegistrationReceiver"  
  17.            android:process=":bdservice_v1" >  
  18.            <intent-filter>  
  19.                <action android:name="com.baidu.android.pushservice.action.METHOD" />  
  20.                <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />  
  21.            </intent-filter>  
  22.            <intent-filter>  
  23.                <action android:name="android.intent.action.PACKAGE_REMOVED" />  
  24.   
  25.                <data android:scheme="package" />  
  26.            </intent-filter>  
  27.        </receiver>  
  28.        <!-- Push 服務 -->  
  29.        <!-- 注意:在4.0 (包含)之后的版本需加上如下所示的intent-filter action -->  
  30.        <service  
  31.            android:name="com.baidu.android.pushservice.PushService"  
  32.            android:exported="true"  
  33.            android:process=":bdservice_v1" >  
  34.            <intent-filter>  
  35.                <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />  
  36.            </intent-filter>  
  37.        </service>  
  38.        <!-- push service end -->  

e,、我們需要自己實現(xiàn)一個Receiver,來接收Push消息、接口調(diào)用回調(diào)以及通知點擊事件,。

  1. <receiver android:name="com.example.zhy_baiduyun_tuisong01.receiver.MyPushMessageReceiver" >  
  2.            <intent-filter>  
  3.                <!-- 接收push消息 -->  
  4.                <action android:name="com.baidu.android.pushservice.action.MESSAGE" />  
  5.                <!-- 接收bind,、setTags等method的返回結(jié)果 -->  
  6.                <action android:name="com.baidu.android.pushservice.action.RECEIVE" />  
  7.                <!-- 可選。接受通知點擊事件,,和通知自定義內(nèi)容 -->  
  8.                  <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />  
  9.            </intent-filter>  
  10.        </receiver>  

代碼:

  1. package com.example.zhy_baiduyun_tuisong01.receiver;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.json.JSONException;  
  6. import org.json.JSONObject;  
  7.   
  8. import android.content.Context;  
  9. import android.content.Intent;  
  10. import android.text.TextUtils;  
  11. import android.util.Log;  
  12.   
  13. import com.baidu.frontia.api.FrontiaPushMessageReceiver;  
  14. import com.example.zhy_baiduyun_tuisong01.MainActivity;  
  15. import com.example.zhy_baiduyun_tuisong01.util.PreUtils;  
  16.   
  17. /** 
  18.  * Push消息處理receiver,。請編寫您需要的回調(diào)函數(shù), 一般來說: onBind是必須的,,用來處理startWork返回值,; 
  19.  * onMessage用來接收透傳消息; onSetTags,、onDelTags,、onListTags是tag相關操作的回調(diào); 
  20.  * onNotificationClicked在通知被點擊時回調(diào),; onUnbind是stopWork接口的返回值回調(diào) 
  21.  *  
  22.  * 返回值中的errorCode,,解釋如下:  
  23.  *  0 - Success 
  24.  *  10001 - Network Problem 
  25.  *  30600 - Internal Server Error 
  26.  *  30601 - Method Not Allowed  
  27.  *  30602 - Request Params Not Valid 
  28.  *  30603 - Authentication Failed  
  29.  *  30604 - Quota Use Up Payment Required  
  30.  *  30605 - Data Required Not Found  
  31.  *  30606 - Request Time Expires Timeout  
  32.  *  30607 - Channel Token Timeout  
  33.  *  30608 - Bind Relation Not Found  
  34.  *  30609 - Bind Number Too Many 
  35.  *  
  36.  * 當您遇到以上返回錯誤時,如果解釋不了您的問題,,請用同一請求的返回值requestId和errorCode聯(lián)系我們追查問題,。 
  37.  *  
  38.  */  
  39. public class MyPushMessageReceiver extends FrontiaPushMessageReceiver {  
  40.     /** TAG to Log */  
  41.     public static final String TAG = MyPushMessageReceiver.class  
  42.             .getSimpleName();  
  43.   
  44.     /** 
  45.      * 調(diào)用PushManager.startWork后,sdk將對push 
  46.      * server發(fā)起綁定請求,,這個過程是異步的,。綁定請求的結(jié)果通過onBind返回。 如果您需要用單播推送,,需要把這里獲取的channel 
  47.      * id和user id上傳到應用server中,,再調(diào)用server接口用channel id和user id給單個手機或者用戶推送。 
  48.      *  
  49.      * @param context 
  50.      *            BroadcastReceiver的執(zhí)行Context 
  51.      * @param errorCode 
  52.      *            綁定接口返回值,,0 - 成功 
  53.      * @param appid 
  54.      *            應用id,。errorCode非0時為null 
  55.      * @param userId 
  56.      *            應用user id。errorCode非0時為null 
  57.      * @param channelId 
  58.      *            應用channel id,。errorCode非0時為null 
  59.      * @param requestId 
  60.      *            向服務端發(fā)起的請求id,。在追查問題時有用; 
  61.      * @return none 
  62.      */  
  63.     @Override  
  64.     public void onBind(Context context, int errorCode, String appid,  
  65.             String userId, String channelId, String requestId) {  
  66.         String responseString = "onBind errorCode=" + errorCode + " appid="  
  67.                 + appid + " userId=" + userId + " channelId=" + channelId  
  68.                 + " requestId=" + requestId;  
  69.         Log.e(TAG, responseString);  
  70.   
  71.         // 綁定成功,,設置已綁定flag,,可以有效的減少不必要的綁定請求  
  72.         if (errorCode == 0) {  
  73.             PreUtils.bind(context);  
  74.         }  
  75.         // Demo更新界面展示代碼,應用請在這里加入自己的處理邏輯  
  76.         updateContent(context, responseString);  
  77.     }  
  78.   
  79.     /** 
  80.      * 接收透傳消息的函數(shù),。 
  81.      *  
  82.      * @param context 
  83.      *            上下文 
  84.      * @param message 
  85.      *            推送的消息 
  86.      * @param customContentString 
  87.      *            自定義內(nèi)容,為空或者json字符串 
  88.      */  
  89.     @Override  
  90.     public void onMessage(Context context, String message,  
  91.             String customContentString) {  
  92.         String messageString = "透傳消息 message=\"" + message  
  93.                 + "\" customContentString=" + customContentString;  
  94.         Log.e(TAG, messageString);  
  95.   
  96.         // 自定義內(nèi)容獲取方式,,mykey和myvalue對應透傳消息推送時自定義內(nèi)容中設置的鍵和值  
  97.         if (!TextUtils.isEmpty(customContentString)) {  
  98.             JSONObject customJson = null;  
  99.             try {  
  100.                 customJson = new JSONObject(customContentString);  
  101.                 String myvalue = null;  
  102.                 if (customJson.isNull("mykey")) {  
  103.                     myvalue = customJson.getString("mykey");  
  104.                 }  
  105.             } catch (JSONException e) {  
  106.                 // TODO Auto-generated catch block  
  107.                 e.printStackTrace();  
  108.             }  
  109.         }  
  110.   
  111.         // Demo更新界面展示代碼,應用請在這里加入自己的處理邏輯  
  112.         updateContent(context, messageString);  
  113.     }  
  114.   
  115.       
  116.       
  117.     /** 
  118.      * 接收通知點擊的函數(shù),。注:推送通知被用戶點擊前,應用無法通過接口獲取通知的內(nèi)容。 
  119.      *  
  120.      * @param context 
  121.      *            上下文 
  122.      * @param title 
  123.      *            推送的通知的標題 
  124.      * @param description 
  125.      *            推送的通知的描述 
  126.      * @param customContentString 
  127.      *            自定義內(nèi)容,,為空或者json字符串 
  128.      */  
  129.     @Override  
  130.     public void onNotificationClicked(Context context, String title,  
  131.             String description, String customContentString) {  
  132.           
  133.           
  134.         String notifyString = "通知點擊 title=\"" + title + "\" description=\""  
  135.                 + description + "\" customContent=" + customContentString;  
  136.         Log.e(TAG, notifyString);  
  137.   
  138.         // 自定義內(nèi)容獲取方式,,mykey和myvalue對應通知推送時自定義內(nèi)容中設置的鍵和值  
  139.         if (!TextUtils.isEmpty(customContentString)) {  
  140.             JSONObject customJson = null;  
  141.             try {  
  142.                 customJson = new JSONObject(customContentString);  
  143.                 String myvalue = null;  
  144.                 if (customJson.isNull("mykey")) {  
  145.                     myvalue = customJson.getString("mykey");  
  146.                 }  
  147.             } catch (JSONException e) {  
  148.                 // TODO Auto-generated catch block  
  149.                 e.printStackTrace();  
  150.             }  
  151.         }  
  152.   
  153.         // Demo更新界面展示代碼,應用請在這里加入自己的處理邏輯  
  154.         updateContent(context, notifyString);  
  155.     }  
  156.   
  157.     /** 
  158.      * setTags() 的回調(diào)函數(shù),。 
  159.      *  
  160.      * @param context 
  161.      *            上下文 
  162.      * @param errorCode 
  163.      *            錯誤碼,。0表示某些tag已經(jīng)設置成功;非0表示所有tag的設置均失敗,。 
  164.      * @param successTags 
  165.      *            設置成功的tag 
  166.      * @param failTags 
  167.      *            設置失敗的tag 
  168.      * @param requestId 
  169.      *            分配給對云推送的請求的id 
  170.      */  
  171.     @Override  
  172.     public void onSetTags(Context context, int errorCode,  
  173.             List<String> sucessTags, List<String> failTags, String requestId) {  
  174.         String responseString = "onSetTags errorCode=" + errorCode  
  175.                 + " sucessTags=" + sucessTags + " failTags=" + failTags  
  176.                 + " requestId=" + requestId;  
  177.         Log.e(TAG, responseString);  
  178.   
  179.         // Demo更新界面展示代碼,,應用請在這里加入自己的處理邏輯  
  180.         updateContent(context, responseString);  
  181.     }  
  182.   
  183.     /** 
  184.      * delTags() 的回調(diào)函數(shù)。 
  185.      *  
  186.      * @param context 
  187.      *            上下文 
  188.      * @param errorCode 
  189.      *            錯誤碼,。0表示某些tag已經(jīng)刪除成功,;非0表示所有tag均刪除失敗。 
  190.      * @param successTags 
  191.      *            成功刪除的tag 
  192.      * @param failTags 
  193.      *            刪除失敗的tag 
  194.      * @param requestId 
  195.      *            分配給對云推送的請求的id 
  196.      */  
  197.     @Override  
  198.     public void onDelTags(Context context, int errorCode,  
  199.             List<String> sucessTags, List<String> failTags, String requestId) {  
  200.         String responseString = "onDelTags errorCode=" + errorCode  
  201.                 + " sucessTags=" + sucessTags + " failTags=" + failTags  
  202.                 + " requestId=" + requestId;  
  203.         Log.e(TAG, responseString);  
  204.   
  205.         // Demo更新界面展示代碼,應用請在這里加入自己的處理邏輯  
  206.         updateContent(context, responseString);  
  207.     }  
  208.   
  209.     /** 
  210.      * listTags() 的回調(diào)函數(shù)。 
  211.      *  
  212.      * @param context 
  213.      *            上下文 
  214.      * @param errorCode 
  215.      *            錯誤碼,。0表示列舉tag成功,;非0表示失敗。 
  216.      * @param tags 
  217.      *            當前應用設置的所有tag,。 
  218.      * @param requestId 
  219.      *            分配給對云推送的請求的id 
  220.      */  
  221.     @Override  
  222.     public void onListTags(Context context, int errorCode, List<String> tags,  
  223.             String requestId) {  
  224.         String responseString = "onListTags errorCode=" + errorCode + " tags="  
  225.                 + tags;  
  226.         Log.e(TAG, responseString);  
  227.   
  228.         // Demo更新界面展示代碼,應用請在這里加入自己的處理邏輯  
  229.         updateContent(context, responseString);  
  230.     }  
  231.   
  232.     /** 
  233.      * PushManager.stopWork() 的回調(diào)函數(shù)。 
  234.      *  
  235.      * @param context 
  236.      *            上下文 
  237.      * @param errorCode 
  238.      *            錯誤碼,。0表示從云推送解綁定成功;非0表示失敗,。 
  239.      * @param requestId 
  240.      *            分配給對云推送的請求的id 
  241.      */  
  242.     @Override  
  243.     public void onUnbind(Context context, int errorCode, String requestId) {  
  244.         String responseString = "onUnbind errorCode=" + errorCode  
  245.                 + " requestId = " + requestId;  
  246.         Log.e(TAG, responseString);  
  247.   
  248.         // 解綁定成功,,設置未綁定flag,  
  249.         if (errorCode == 0) {  
  250.             PreUtils.unbind(context);  
  251.         }  
  252.         // Demo更新界面展示代碼,,應用請在這里加入自己的處理邏輯  
  253.         updateContent(context, responseString);  
  254.     }  
  255.   
  256.     private void updateContent(Context context, String content) {  
  257.         Log.e(TAG, "updateContent");  
  258.         //String logText = "" + Utils.logStringCache;  
  259.   
  260. //        if (!logText.equals("")) {  
  261. //            logText += "\n";  
  262. //        }  
  263.   
  264. //        SimpleDateFormat sDateFormat = new SimpleDateFormat("HH-mm-ss");  
  265. //        logText += sDateFormat.format(new Date()) + ": ";  
  266. //        logText += content;  
  267.   
  268.         //Utils.logStringCache = logText;  
  269.   
  270.         Intent intent = new Intent();  
  271.         intent.putExtra("result", content);  
  272.         intent.setClass(context.getApplicationContext(), MainActivity.class);  
  273.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  274.         context.getApplicationContext().startActivity(intent);  
  275.     }  
  276.   
  277. }  

代碼是官方Demo的代碼,,注釋特別詳細,做了一點修改,,每次回調(diào)的結(jié)果,,我會讓顯示到主界面上。主Actvity:

  1. package com.example.zhy_baiduyun_tuisong01;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.util.Log;  
  7. import android.widget.TextView;  
  8.   
  9. import com.baidu.android.pushservice.PushConstants;  
  10. import com.baidu.android.pushservice.PushManager;  
  11. import com.example.zhy_baiduyun_tuisong01.util.PreUtils;  
  12.   
  13. public class MainActivity extends Activity  
  14. {  
  15.     private TextView mTextView;  
  16.   
  17.     @Override  
  18.     protected void onCreate(Bundle savedInstanceState)  
  19.     {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.activity_main);  
  22.         initView();  
  23.   
  24.         autoBindBaiduYunTuiSong();  
  25.   
  26.     }  
  27.   
  28.     private void initView()  
  29.     {  
  30.         mTextView = (TextView) findViewById(R.id.id_textview);  
  31.     }  
  32.   
  33.     @Override  
  34.     protected void onNewIntent(Intent intent)  
  35.     {  
  36.         String result = intent.getStringExtra("result");  
  37.         if (result != null)  
  38.         {  
  39.             mTextView.setText(result);  
  40.   
  41.         }  
  42.         // super.onNewIntent(intent);  
  43.     }  
  44.   
  45.     /** 
  46.      * 如果沒有綁定百度云,,則綁定,,并記錄在屬性文件中 
  47.      */  
  48.     private void autoBindBaiduYunTuiSong()  
  49.     {  
  50.         if (!PreUtils.isBind(getApplicationContext()))  
  51.         {  
  52.             PushManager.startWork(getApplicationContext(),  
  53.                     PushConstants.LOGIN_TYPE_API_KEY,  
  54.                     "TVkKGesssSDs5q7AamLGnNCs");  
  55.         }  
  56.     }  
  57.   
  58. }  

最終的測試:

1、應用安裝后,,如果綁定成功,,主界面:


然后在管理控制臺開始分別發(fā)送通知和消息:


2、當發(fā)送通知并點擊通知:


3,、當發(fā)送消息:




好了,,都是最基本的功能,,沒什么技術(shù)含量就是需要點耐心,下面貼上源碼,,使用源碼請把MainActivity里面的KEY設置成自己申請的KEY,。


源碼點擊下載


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多