1. 程式人生 > >友盟訊息推送安卓文件、 python端sdk、demo程式碼

友盟訊息推送安卓文件、 python端sdk、demo程式碼

###demo程式碼在最後

一,友盟訊息推送python服務端sdk地址和文件地址

  1.sdk地址:http://dev.umeng.com/system/resources/W1siZiIsIjIwMTYvMDgvMTkvMTdfNDFfMzhfNzg2X3B1c2hfc2VydmVyX3B5c2RrLnppcCJdXQ/push-server-pysdk.zip

  2.文件:http://dev.umeng.com/push/android/api-doc

二、python官方sdk程式碼中的錯誤(沒錯!官方程式碼有錯。)

  

三、推送型別

  sdk中有六中訊息型別,分別為單播(unicast)、列播(listcast)、廣播(broadcast)、組播(groupcast)、檔案播(filecast)、自定義播(customizedcast)六中

  1.引數說明:

  • Appkey:應用唯一標識。友盟訊息推送服務提供的appkey和友盟統計分析平臺使用的同一套appkey。
  • App Master Secret:伺服器祕鑰,用於伺服器端呼叫API請求時對傳送內容做簽名驗證。
  • device_token: 友盟訊息推送服務對裝置的唯一標識。Android的device_token是44位字串,iOS的device_token是64位。
  • alias: 開發者自有賬號,開發者可以在SDK中呼叫setAlias(alias, alias_type)介面將alias+alias_type與device_token做繫結,之後開發者就可以根據自有業務邏輯篩選出alias進行訊息推送。
  • 單播(unicast): 向指定的裝置傳送訊息。
  • 列播(listcast): 向指定的一批裝置傳送訊息。
  • 廣播(broadcast): 向安裝該App的所有裝置傳送訊息。
  • 組播(groupcast): 向滿足特定條件的裝置集合傳送訊息,例如: "特定版本"、"特定地域"等。
  • 檔案播(filecast): 開發者將批量的device_token或者alias存放到檔案,通過檔案ID進行訊息傳送。
  • 自定義播(customizedcast): 開發者通過自有的alias進行推送,可以針對單個或者一批alias進行推送,也可以將alias存放到檔案進行傳送。
  • 通知-Android(notification): 訊息送達到使用者裝置後,由友盟SDK接管處理並在通知欄上顯示通知內容。
  • 訊息-Android(message): 訊息送達到使用者裝置後,訊息內容透傳給應用自身進行解析處理。
  • 通知-iOS: 和APNs定義一致。
  • 靜默推送-iOS: 和APNs定義一致。
  • 測試模式: 在廣播、組播等大規模傳送訊息的情況下,為了防止開發者誤將測試訊息大面積發給線上使用者,特增加了測試模式。 測試模式下,只會將訊息傳送給測試裝置。測試裝置需要到網站上手工新增。
  • 測試模式-Android: Android的測試裝置是正式裝置的一個子集
  • 測試模式-iOS: iOS的測試模式對應APNs的開發環境(sandbox), 正式模式對應APNs的生產環境(prod),測試裝置和正式裝置完全隔離。
  • 簽名: 為了保證呼叫API的請求是合法者傳送且引數沒有被篡改,需要在呼叫API時對傳送的所有內容進行簽名。簽名附加在呼叫地址後面,簽名的計算方式參見附錄K
  • 推送型別: 單播(unicast)、列播(listcast)、自定義播(customizedcast且不帶file_id)統稱為單播型別訊息Web後臺不會展示此類訊息詳細資訊,僅展示前一天的彙總資料;廣播(broadcast)、檔案播(filecast)、組播(groupcast)、自定義播(customizedcast且file_id不為空)統稱為任務型別訊息,任務支援查詢、撤銷操作,Web後臺會展示此類訊息詳細資訊

 2.傳送限制

  1. 廣播(broadcast)預設每天可推送10次
  2. 組播(groupcast)預設每分鐘可推送5次
  3. 檔案播(filecast)預設每小時可推送300次
  4. 自定義播(customizedcast, 且file_id不為空)預設每小時可推送300次

  3.訊息傳送

   1.功能說明

    開發者通過此介面,可向 指定使用者(單播)、 所有使用者(廣播) 或 滿足特定條件的使用者群(組播),傳送 通知 或 訊息。此外,該介面還支援開發者使用 自有的賬號系統(alias) 來發送訊息給指定的賬號或者賬號群。
    注意,iOS推送的相關協議,請嚴格按照APNs的協議來填寫,友盟完全遵循APNs的協議

  2.呼叫地址

    http介面:http://msg.umeng.com/api/send?sign=mysign

    https介面:https://msgapi.umeng.com/api/send?sign=mysign

    請求方式:post

  3.呼叫引數

    安卓: 

{
  "appkey":"xx",    // 必填,應用唯一標識
  "timestamp":"xx", // 必填,時間戳,10位或者13位均可,時間戳有效期為10分鐘
  "type":"xx",      // 必填,訊息傳送型別,其值可以為: 
                    //   unicast-單播
                    //   listcast-列播,要求不超過500個device_token
                    //   filecast-檔案播,多個device_token可通過檔案形式批量傳送
                    //   broadcast-廣播
                    //   groupcast-組播,按照filter篩選使用者群, 請參照filter引數
                    //   customizedcast,通過alias進行推送,包括以下兩種case:
                    //     - alias: 對單個或者多個alias進行推送
                    //     - file_id: 將alias存放到檔案後,根據file_id來推送
  "device_tokens":"xx", // 當type=unicast時, 必填, 表示指定的單個裝置
                        // 當type=listcast時, 必填, 要求不超過500個, 以英文逗號分隔
  "alias_type": "xx", // 當type=customizedcast時, 必填
                      // alias的型別, alias_type可由開發者自定義, 開發者在SDK中
                      // 呼叫setAlias(alias, alias_type)時所設定的alias_type
  "alias":"xx", // 當type=customizedcast時, 選填(此引數和file_id二選一)
                // 開發者填寫自己的alias, 要求不超過500個alias, 多個alias以英文逗號間隔
                // 在SDK中呼叫setAlias(alias, alias_type)時所設定的alias
  "file_id":"xx", // 當type=filecast時,必填,file內容為多條device_token,以回車符分割
                  // 當type=customizedcast時,選填(此引數和alias二選一)
                  //   file內容為多條alias,以回車符分隔。注意同一個檔案內的alias所對應
                  //   的alias_type必須和介面引數alias_type一致。
                  // 使用檔案播需要先呼叫檔案上傳介面獲取file_id,參照"2.4檔案上傳介面"
  "filter":{}, // 當type=groupcast時,必填,使用者篩選條件,如使用者標籤、渠道等,參考附錄G。
  "payload": // 必填,JSON格式,具體訊息內容(Android最大為1840B)
  {
    "display_type":"xx",   // 必填,訊息型別: notification(通知)、message(訊息)   
    "body": // 必填,訊息體。
            // 當display_type=message時,body的內容只需填寫custom欄位。
            // 當display_type=notification時,body包含如下引數:
    {
        // 通知展現內容:
        "ticker":"xx",     // 必填,通知欄提示文字
        "title":"xx",      // 必填,通知標題
        "text":"xx",       // 必填,通知文字描述 

        // 自定義通知圖示:
        "icon":"xx",       // 可選,狀態列圖示ID,R.drawable.[smallIcon],
                           // 如果沒有,預設使用應用圖示。
                           // 圖片要求為24*24dp的圖示,或24*24px放在drawable-mdpi下。
                           // 注意四周各留1個dp的空白畫素
        "largeIcon":"xx",  // 可選,通知欄拉開後左側圖示ID,R.drawable.[largeIcon],
                           // 圖片要求為64*64dp的圖示,
                           // 可設計一張64*64px放在drawable-mdpi下,
                           // 注意圖片四周留空,不至於顯示太擁擠
        "img": "xx",       // 可選,通知欄大圖示的URL連結。該欄位的優先順序大於largeIcon。
                           // 該欄位要求以http或者https開頭。

        // 自定義通知聲音:
        "sound": "xx",     // 可選,通知聲音,R.raw.[sound]。
                           // 如果該欄位為空,採用SDK預設的聲音,即res/raw/下的
                           // umeng_push_notification_default_sound聲音檔案。如果
                           // SDK預設聲音檔案不存在,則使用系統預設Notification提示音。

        // 自定義通知樣式:
        "builder_id": xx   // 可選,預設為0,用於標識該通知採用的樣式。使用該引數時,
                           // 開發者必須在SDK裡面實現自定義通知欄樣式。

        // 通知到達裝置後的提醒方式,注意,"true/false"為字串
        "play_vibrate":"true/false", // 可選,收到通知是否震動,預設為"true"
        "play_lights":"true/false",  // 可選,收到通知是否閃燈,預設為"true"
        "play_sound":"true/false",   // 可選,收到通知是否發出聲音,預設為"true"

        // 點選"通知"的後續行為,預設為開啟app。
        "after_open": "xx" // 必填,值可以為:
                           //   "go_app": 開啟應用
                           //   "go_url": 跳轉到URL
                           //   "go_activity": 開啟特定的activity
                           //   "go_custom": 使用者自定義內容。
        "url": "xx",       // 當after_open=go_url時,必填。
                           // 通知欄點選後跳轉的URL,要求以http或者https開頭  
        "activity":"xx",   // 當after_open=go_activity時,必填。
                           // 通知欄點選後開啟的Activity
        "custom":"xx"/{}   // 當display_type=message時, 必填
                           // 當display_type=notification且
                           // after_open=go_custom時,必填
                           // 使用者自定義內容,可以為字串或者JSON格式。
    },
    extra:                 // 可選,JSON格式,使用者自定義key-value。只對"通知"
                           // (display_type=notification)生效。
                           // 可以配合通知到達後,開啟App/URL/Activity使用。
    {
        "key1": "value1",
        "key2": "value2",
        ...
    }
  },
  "policy":                // 可選,傳送策略
  {
      "start_time":"xx",   // 可選,定時傳送時,若不填寫表示立即傳送。
                           // 定時傳送時間不能小於當前時間
                           // 格式: "yyyy-MM-dd HH:mm:ss"// 注意,start_time只對任務生效。
      "expire_time":"xx",  // 可選,訊息過期時間,其值不可小於傳送時間或者
                           // start_time(如果填寫了的話),
                           // 如果不填寫此引數,預設為3天后過期。格式同start_time
      "max_send_num": xx   // 可選,傳送限速,每秒傳送的最大條數。最小值1000
                           // 開發者傳送的訊息如果有請求自己伺服器的資源,可以考慮此引數。
      "out_biz_no": "xx"   // 可選,開發者對訊息的唯一標識,伺服器會根據這個標識避免重複傳送。
                           // 有些情況下(例如網路異常)開發者可能會重複呼叫API導致
                           // 訊息多次下發到客戶端。如果需要處理這種情況,可以考慮此引數。
                           // 注意, out_biz_no只對任務生效。
  },
  "production_mode":"true/false", // 可選,正式/測試模式。預設為true
                                 // 測試模式只會將訊息發給測試裝置。測試裝置需要到web上新增。
                                 // Android: 測試裝置屬於正式裝置的一個子集。
  "description": "xx",      // 可選,傳送訊息描述,建議填寫。  
  "mipush": "true/false",   // 可選,預設為false。當為true時,表示MIUI、EMUI、Flyme系統裝置離線轉為系統下發
  "mi_activity": "xx",      // 可選,mipush值為true時生效,表示走系統通道時開啟指定頁面acitivity的完整包路徑。
}

    ios:

      

{
  "appkey":"xx",    // 必填,應用唯一標識
  "timestamp":"xx", // 必填,時間戳,10位或者13位均可,時間戳有效期為10分鐘
  "type":"xx",      // 必填,訊息傳送型別,其值可以為: 
                    //   unicast-單播
                    //   listcast-列播,要求不超過500個device_token
                    //   filecast-檔案播,多個device_token可通過檔案形式批量傳送
                    //   broadcast-廣播
                    //   groupcast-組播,按照filter篩選使用者群, 請參照filter引數
                    //   customizedcast,通過alias進行推送,包括以下兩種case:
                    //     - alias: 對單個或者多個alias進行推送
                    //     - file_id: 將alias存放到檔案後,根據file_id來推送
  "device_tokens":"xx", // 當type=unicast時, 必填, 表示指定的單個裝置
                        // 當type=listcast時, 必填, 要求不超過500個, 以英文逗號分隔
  "alias_type": "xx", // 當type=customizedcast時, 必填
                      // alias的型別, alias_type可由開發者自定義, 開發者在SDK中
                      // 呼叫setAlias(alias, alias_type)時所設定的alias_type
  "alias":"xx", // 當type=customizedcast時, 選填(此引數和file_id二選一)
                // 開發者填寫自己的alias, 要求不超過500個alias, 多個alias以英文逗號間隔
                // 在SDK中呼叫setAlias(alias, alias_type)時所設定的alias
  "file_id":"xx", // 當type=filecast時,必填,file內容為多條device_token,以回車符分割
                  // 當type=customizedcast時,選填(此引數和alias二選一)
                  //   file內容為多條alias,以回車符分隔。注意同一個檔案內的alias所對應
                  //   的alias_type必須和介面引數alias_type一致。
                  // 使用檔案播需要先呼叫檔案上傳介面獲取file_id,參照"2.4檔案上傳介面"
  "filter":{}, // 當type=groupcast時,必填,使用者篩選條件,如使用者標籤、渠道等,參考附錄G。
  "payload":   // 必填,JSON格式,具體訊息內容(iOS最大為2012B)
  {
    "aps":      // 必填,嚴格按照APNs定義來填寫
    {
        "alert":""/{ // 當content-available=1時(靜默推送),可選; 否則必填。
                     // 可為JSON型別和字串型別
            "title":"title",
            "subtitle":"subtitle",
            "body":"body"
        }                   
        "badge": xx,           // 可選        
        "sound": "xx",         // 可選         
        "content-available":1  // 可選,代表靜默推送     
        "category": "xx",      // 可選,注意: ios8才支援該欄位。
    },
    "key1":"value1",       // 可選,使用者自定義內容, "d","p"為友盟保留欄位,
                           // key不可以是"d","p"
    "key2":"value2",       
    ...
  },
  "policy":               // 可選,傳送策略
  {
      "start_time":"xx",   // 可選,定時傳送時間,若不填寫表示立即傳送。
                           // 定時傳送時間不能小於當前時間
                           // 格式: "yyyy-MM-dd HH:mm:ss"// 注意,start_time只對任務生效。
      "expire_time":"xx",  // 可選,訊息過期時間,其值不可小於傳送時間或者
                           // start_time(如果填寫了的話), 
                           // 如果不填寫此引數,預設為3天后過期。格式同start_time
      "out_biz_no": "xx"   // 可選,開發者對訊息的唯一標識,伺服器會根據這個標識避免重複傳送。
                           // 有些情況下(例如網路異常)開發者可能會重複呼叫API導致
                           // 訊息多次下發到客戶端。如果需要處理這種情況,可以考慮此引數。
                           // 注意,out_biz_no只對任務生效。
      "apns_collapse_id": "xx" // 可選,多條帶有相同apns_collapse_id的訊息,iOS裝置僅展示
                               // 最新的一條,欄位長度不得超過64bytes
  },
  "production_mode":"true/false" // 可選,正式/測試模式。預設為true
                                 // 測試模式只會將訊息發給測試裝置。測試裝置需要到web上新增。
  "description": "xx"      // 可選,傳送訊息描述,建議填寫。     
}

    呼叫返回:

{
  "ret":"SUCCESS/FAIL", // 返回結果,"SUCCESS"或者"FAIL"
  "data": 
    {
        // 當"ret""SUCCESS"時,包含如下引數:
        // 單播類訊息(type為unicast、listcast、customizedcast且不帶file_id)返回:
        "msg_id":"xx" 
        // 任務類訊息(type為broadcast、groupcast、filecast、customizedcast且file_id不為空)返回
        "task_id":"xx"

        // 當"ret""FAIL"時,包含如下引數:
        "error_code":"xx" // 錯誤碼,詳見附錄I
        "error_msg":"xx"  // 錯誤資訊
    }  
}

四、單播demo程式碼

  

五、自定義播demo程式碼

  

 

六、廣播demo程式碼

  

七、如何設定任意引數中的欄位

# 使用setPredefinedKeyValue(key,value)
setPredefinedKeyValue("mipush", 'false')
# 使用setPredefinedKeyValue的時候,類中會自動迴圈判斷引數中的所有key,當key存在時,會設定為value