云推送?

服務概述?

云推送(Push)是新浪云開發的協助開發者推送手機通知的服務,目前支持iOS和Android系統的推送。

iOS版本介紹?

服務說明?

開發者通過編寫代碼調用API接口(或直接通過新浪云提供的頁面)推送消息,消息先存到新浪云,再由新浪云的推送服務發送到蘋果的推送服務器(APNs),最后由APNs投遞到用戶的手機。請參照下圖:

../../_images/pushApple.png

使用推送服務,首先請在新浪云應用的“服務管理”列表中找到“云推送”服務頁面,在“推送設置”頁面上傳證書。證書的生成請參考蘋果官方文檔。證書上傳成功后就可以通過調用新浪云云推送服務接口(或“云推送”頁面“推送消息”頁)推送手機通知了。

注解

為提高蘋果推送的及時性和成功率,請開發者注意以下幾點:

  1. 請注意證書的類型,正確選擇開發環境和正式環境。
  2. 請注意證書的過期時間。bundle ID與App Id 保持一致。
  3. push函數調用成功,只代表消息已推送到新浪云服務器,并不代表成功推送到蘋果服務器。(“推送統計”展示的推送成功數代表成功推送到蘋果服務器)。
  4. 如需查看推送成功率(該數據會有十分鐘左右延遲),可通過“推送統計”查看,也可以使用getinfo函數查看(目前該接口只提供當天的數據)。
  5. 如需要查看具體失敗的原因,可通過“日志中心”的云推送頁查看。

服務限制?

單app最大上傳證書數 10

iOS API使用手冊?

點擊查看

使用示例?

下面使用代碼來說明云推送iOS服務的調用方式。

<?php

$cert_id = 1;
$device_token = "xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx";
$message = "hello world";

//這個是簡單的例子,更復雜的消息格式請查看蘋果官方文檔
$body = array(
    'aps' => array( 'alert' => $message , 'badge' => 1, 'sound' => 'in.caf')
);
$apns = new SaeAPNS();
//push消息到新浪云推送服務器
$result = $apns->push( $cert_id , $body , $device_token );

if( $result && is_array($result) ){
    echo '發送成功';
    var_dump( $result );
} else {
    echo '發送失敗';
    var_dump($apns->errno(), $apns->errmsg());
}

//查看消息發送的匯總信息,返回值包括當天發送成功的消息數,以及因各類原因發送失敗的消息數。
$result = $apns->getInfo($cert_id);
if ($result === false) {
    echo "getInfo失敗";
    var_dump($apns->errno(), $apns->errmsg());
} else {
    echo "getInfo成功";
    var_dump($result);
}

?>

Android版本介紹?

服務說明?

開發者通過編寫代碼調用API接口(或直接通過新浪云提供的頁面)推送消息,消息先存到新浪云,再由新浪云的推送服務投遞到用戶的手機。請參照下圖:

../../_images/pushAndroid.png

使用推送服務,首先需要在新浪云應用的“服務管理”列表中找到“云推送”服務頁面,在“推送設置”頁面申請AppID。

Android Push Service用AppID來標識應用。申請完AppID后,即可參考 Android SDK 說明 在Android App中嵌入新浪云的SDK了。

App開發完成后,可以使用新浪云云推送服務接口推送手機通知。

服務限制?

單app可申請的AppID 1
離線消息存儲條數 最后5條
離線消息有效期 12小時
最大消息長度 4M

Android SDK 說明?

概述?

新浪云 Android Push SDK以Jar包的形式提供,方便開發者使用,對外的調用類只有一個PushManager,通過這個類可以打開、關閉、刷新Push的通道。Push通道以TCP長連接的形式存在。

集成SDK?

云推送Android SDK 下載新浪云云推送Android的SDK并解壓。

在Eclipse中打開需要使用云推送服務的工程,按照如下步驟集成。

在工程根目錄下的libs文件夾中,導入SDK里的SinaPush_{version}_SAE_release.jar包和最新的android-support-v{version}.jar 包,若沒有libs目錄,則選中工程,右鍵new->folder,命名為libs。

在應用的 AndroidManifest.xml 中添加相關權限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="yourPackageName.permission.SINA_PUSH" />

<!-- 添加 SinaPushSDK 自定義的權限 -->
<permission
android:name=" yourPackageName.permission.SINA_PUSH"
android:protectionLevel="normal" />

在應用的AndroidManifest.xml中配置服務

<!--
聲明使用 SinaPushSDK 必須啟動的服務
com.sina.push.service.SinaPushService注意:需要有 android:permission="
yourPackageName.permission.SINA_PUSH"
-->
<service
android:name="com.sina.push.service.SinaPushService"
android:label="PushDataCenter"
android:permission="yourPackageName.permission.SINA_PUSH"
android:process=":remote" >
<intent-filter>
<!--
SinaPushSDK service action 命名規則
sina.push.action.service.APPID
注意必須為: sina.push.action.service. + APPID
-->
<action android:name="sina.push.action.service.1004" />
<category android:name="android.category.DEFAULT" />
</intent-filter>
</service>
<!--
聲明使用 SinaPushSDK 必須注冊的廣播事件
-->
<receiver android:name="com.sina.push.receiver.PushSDKReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<!--
聲明使用 SinaPushSDK 接收透傳消息的廣播事件
-->
<receiver android:name=".SDKMsgReceiver" >
<intent-filter>
<action android:name="com.sina.push.msg.broadcast.1004" /></intent-filter>
</receiver>
<provider android:name="com.sina.push.datacenter.PushProvider"
android:process=":remote"
android:multiprocess="false"
android:authorities="com.sina.push.pushprovider.1004"/>
<meta-data android:name="sinapush_appid" android:value="1004" />

注解

上文Demo中的1004,應替換為自己應用的AppID,AppID需要從新浪云的服務頁面申請。

在調用所有接口前,必須先進行初始化,且初始化只需要調用一次。

PushManager manager = PushManager.getInstance(getApplicationContext());

接收 Push 消息?

消息分類

Push消息分為兩類,一類是SDK處理的消息,一類是透傳給App處理的消息。

  1. SDK處理的消息:Android Push SDK 收到消息后,SDK直接處理,不會透傳給App。
  2. 透傳給App的消息:Android Push SDK 收到消息后,直接封裝,透傳給App處理。如果想將消息透傳給App,需要在推送消息時,添加extra字段。如:使用示例 中push時添加的 $extra 參數。

注解

如果想由應用自己來處理、展示 push 消息,那么必須由 Server 端在消息中 extra 字段內添加 json 格式的信息:

handle_by_app: 1 為 app 處理, 0 為 SDK 處理, 默認為 0。

接收Push消息

Push 的消息類型

類型 說明 消息實體
MSG_TYPE_MPS_PUSH_DATA Push 消息 PushDataPacket
MSG_TYPE_ACTION_SWITCH_CHANNEL 通道打開消息 ActionResult
MSG_TYPE_SAE_DATA Aid 消息 String
MSG_CHANNEL_HAS_BEEN_BUILDED 通道打開消息

注解

aid是推送服務的設備標識,推送消息時,會要求提供aid參數:

  1. 設備的aid不是永久不變的,設備長時間未連接到服務器,aid標識會被服務器端刪除,再次連接時會重新分配aid。
  2. 清除App數據也會導致aid改變。

Demo

public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    int msg_type = intent.getIntExtra(MPSConsts.CMD_ACTION, -1);
    switch(msg_type){
    case MPSConsts.MSG_TYPE_MPS_PUSH_DATA:
        PushDataPacket packet = intent.getParcelableExtra(MPSConsts.KEY_MSG_MPS_PUSH_DATA);
        Toast.makeText(context, "onPush data: " + packet.getSrcJson(),
        Toast.LENGTH_LONG).show();
        break;
    case MPSConsts.MSG_TYPE_UPLOAD_BUSINESS_ERROR:
        break;
    case MPSConsts.MSG_CHANNEL_HAS_BEEN_BUILDED:
        System.out.println("MPSConsts.MSG_CHANNEL_HAS_BEEN_BUILDED!");
        Toast.makeText(context, "MSG_CHANNEL_HAS_BEEN_BUILDED", Toast.LENGTH_LONG).show();
        break;
    case MPSConsts.MSG_TYPE_SAE_DATA:
        String aid = intent.getStringExtra(MPSConsts.KEY_MSG_SAE_DATA);
        LogUtil.debug("SDKMsgReceiver aid ===========" + aid);
        Toast.makeText(context, aid, Toast.LENGTH_LONG).show();
        break;
    }
}

跳轉到具體頁面

1. 跳轉到某個應用的頁面: SDK 收到 push 消息后會發出一個 notification 或是彈出一個 dialog。當用戶點擊notification 或對話框上的按鈕時,會跳轉到相應的頁面。例如掌中新浪,收到了一個 push下來的新聞消息,展示為 notification,點擊后跳轉到顯示新聞的 activity 中。要想完成上述功能,需要在 push 消息中 acts 字段的參數中包含該應用的包名和 activity 的類名。

動作名/動作 ID:2

參數 1:包名

參數 2:完整類名

“acts”: [“2,com.sina.news,com.sina.news.ui.NewContentActivity”],

2. 跳轉到瀏覽器: SDK 收到消息后如果想跳轉到瀏覽器,需要在 push 消息中 acts 字段的參數中包含 url地址。

動作名/動作 ID:4

參數 1:url 地址

“acts”: [“4,http://www.sina.com”],

3. 通過 Scheme 跳轉: 通過 Scheme 跳轉到某個應用的 activity 中。

動作名/動作 ID:5

參數 1:scheme

“acts”: [“5,sinaweibo://sendweibo”],

Android SDK API說明?

public void initPushChannel(String... params)

打開特定類型的Push通道,準備接收Push消息

注解

在通道的準備過程中,調用功能接口可能會失敗, 請先處理initPushChannel(string)的執行結果。

參數:
  • appID (String) – 應用程序的唯一序號(由 新浪云 服務面板申請的AppID)
  • channelID (String) – 通道編號, 由 新浪云 指定, 同 appID
  • wm (String) – 暫無含義,填入 ‘100’
  • from (String) – 暫無含義,填入 ‘100’
public void close()

關閉當前打開的通道,停止接收Push消息, 直到再次調用initPushChannel()。

public void refreshConnection()

刷新連接,如果連接斷開,則立即進行重連。

Android API使用手冊?

點擊查看

使用示例?

下面使用代碼來說明云推送Android服務的調用方式。

<?php

$appid = 20001;
$token = 'BYfkQcUYULUB';
$title = 'title';
$msg = 'hello wolrd';
$acts = "[\"2,sina.Apns,sina.Apns.MainActivity\"]";
$extra = array(
    'handle_by_app'=>'0'
);

$adpns = new SaeADPNS();
//appid 是應用的標識,從新浪云的推送服務頁面申請
//token 是SDK通道標識,從SDK的onPush中獲取
$result = $adpns->push($appid, $token, $title, $msg, $acts, $extra);
if ($result && is_array($result)) {
    echo '發送成功!';
    var_dump($result);
} else {
    echo '發送失敗。';
    var_dump($apns->errno(), $apns->errmsg());
}

?>
河南22选5开奖
  • <em id="xpjve"><ol id="xpjve"></ol></em>

          1. <em id="xpjve"><ol id="xpjve"></ol></em>