iOS 普通推送和靜默推送【公司要求用個推】

寫在前面:應(yīng)用場景很重要

如果你的公司有這樣一個硬性的需求:用戶將APP退出到后臺的時候,當(dāng)該用戶收到推送的時候,不讓用戶感覺到推送過來了,不想打擾用戶,但是還想拿到推送內(nèi)容做一些事情。
在開發(fā)人員看來就是要實現(xiàn)如下功能:通知欄沒有文字、沒有內(nèi)容、也沒有聲音,同時還要能實現(xiàn)客戶端退出到后臺時,還能執(zhí)行xcode中的某個特定方法,那么此時就可以用到靜默推送


必須知道個推中這些名詞的含義,后面再出現(xiàn)這些名詞就不做闡述了

離線:APP在后臺運行/APP未啟動/APP被殺死。
在線:APP在前臺運行。
iOS 個推透傳機制

iOS消息推送方式只有兩種:

APNs的通知欄消息
個推的透傳消息


以下說的是普通推送和靜默推送的不同之處:

普通推送:當(dāng)APP離線時,當(dāng)有推送下達的時候,走的是APNs,所以手機會有鈴聲、手機頂部出現(xiàn)橫幅/通知欄會收到通知。

  • APP離線時,相關(guān)方法什么時候執(zhí)行,看下面1-4就知道了:
    1.只有點開通知欄中的通知進入APP/點開橫幅中的通知進入APP,才會執(zhí)行方法AAA;不點擊不執(zhí)行。
    2.點擊應(yīng)用圖標進入APP,一定不會執(zhí)行方法AAA。
    3.APP離線收到推送,點擊應(yīng)用圖標進入APP/點開通知欄中的通知/點開橫幅中的通知進入APP,會執(zhí)行個推提供的 方法BBB的離線的透傳消息
    4.APP在線收到推送,就不走APNs,會直接執(zhí)行個推提供的 方法BBB的在線的透傳消息

  • 總結(jié):綜合1-4,只要點開APNs發(fā)來的通知,那么先執(zhí)行方法AAA,再執(zhí)行個推的方法BBB


方法AAA
iOS 10之前,點通知,會調(diào)用如下方法。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
     ...   
  做你想做的操作。例如更新UI,跳轉(zhuǎn)界面,文字轉(zhuǎn)語音并讀出來,頂部彈框,操作userInfo中的內(nèi)容。
     ...
}


iOS 10 及以后版本,點擊通知,會調(diào)用如下方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler{
    
      ...
     做你想做的操作。例如更新UI,跳轉(zhuǎn)界面,文字轉(zhuǎn)語音并讀出來,頂部彈框,操作userInfo中的內(nèi)容。
      ...

    NSLog(@"didReceiveNotification:%@", response.notification.request.content.userInfo);
    // [ GTSdk ]:將收到的APNs信息傳給個推統(tǒng)計
    [GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];
    completionHandler();
    
}
方法BBB
  • 離線的透傳消息:程序離線收到推送時候,當(dāng)由離線進入在線的時候會執(zhí)行(offLine為YES)。離線的時候不會執(zhí)行該方法。
  • 在線的透傳消息:程序在線收到推送的時候會執(zhí)行(offLine為NO)。
接收個推推送的透傳消息,就會執(zhí)行如下代理方法
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {

   拿到payloadData并轉(zhuǎn)成字符串,然后做你想做的操作 :更新UI,跳轉(zhuǎn)界面,文字轉(zhuǎn)語音并讀出來,頂部彈框

   if (!offLine) {// offLine為NO表示在線的透傳消息。
       
    }else{// offLine為YES表示離線的透傳消息。
    
   }
}

普通推送->服務(wù)端格式:
    $alertmsg=new DictionaryAlertMsg();//  必須有。    聲明DictionaryAlertMsg的對象alertmsg
    $alertmsg->body=$msgContent;//  必須有。   為body賦值
    $alertmsg->title=SYS_ZH_NAME;//  必須有。   為title賦值

    $apn = new IGtAPNPayload();// 必須有。   聲明IGtAPNPayload的對象apn
    $apn->alertMsg=$alertmsg;// 必須有alertmsg,且alertmsg中一定有title以及和body,因為這就是客戶端在通知欄/橫幅看到的標題和內(nèi)容。
    $apn->contentAvailable=0;// 必須為0 
    $apn->sound=$client_notice;// 必須有sound
    $apn->badge=1;// 角標,可有可無
    $apn->add_customMsg("msg",$msgContent);// msg,可有可無
普通推送->客戶端格式:
{
  "aps" : {
    "sound" : "notice_type1.caf",// 必須有sound
    "alert" : { // 必須有。    服務(wù)器端一定要有alertmsg
      "title" : "一秒招聘",// 必須有
      "body" : "有一條新的招工信息,點擊查看詳情" // 必須有 
    },
      "badge" : 1,// 角標,可有可無
  },
      "msg" : "有一條新的招工信息,點擊查看詳情"http:// msg可有可無
}

靜默推送(安安靜靜的、用戶感知不到):當(dāng)APP離線時,當(dāng)有推送下達的時候,通知欄/橫幅中沒有文字,同時也不會發(fā)出聲音)

  • 1.應(yīng)用被殺死或者應(yīng)用未啟動,不會執(zhí)行如下的代碼。
  • 2.應(yīng)用退出到后臺,當(dāng)收到通知的時候(不點開通知,也不打開APP哦),就會立刻執(zhí)行如下的代碼CCC。 所以靜默推送的定義也就出現(xiàn)了:應(yīng)用收到通知后在后臺(background)狀態(tài)下可以執(zhí)行下面一段代碼CCC,可用于從服務(wù)器獲取內(nèi)容更新,做你想做的任何操作(跳轉(zhuǎn)界面,文字轉(zhuǎn)語音并讀出聲音),所以靜默推送不同于其他推送,其他推送不能執(zhí)行代碼CCC。
  • 3.APP離線收到推送,點擊應(yīng)用圖標進入APP/點開通知欄中的通知/點開橫幅中的通知進入APP,會執(zhí)行個推提供的 方法DDD的離線的透傳消息
  • 4.APP在線收到推送,就不走APNs,會直接執(zhí)行個推提供的 方法DDD的在線的透傳消息
代碼CCC
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
  ...   
做你想做的操作:這里我用蘋果自帶的文字轉(zhuǎn)語音播放userInfo里面的指定內(nèi)容
  ...
}
方法DDD
  • 離線的透傳消息:程序離線收到推送時候,當(dāng)由離線進入在線的時候會執(zhí)行(offLine為YES)。離線的時候不會執(zhí)行該方法。
  • 在線的透傳消息:程序在線收到推送的時候會執(zhí)行(offLine為NO)。
接收個推推送的透傳消息,就會執(zhí)行如下代理方法
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {

   拿到payloadData并轉(zhuǎn)成字符串,然后做你想做的操作 :更新UI,跳轉(zhuǎn)界面,文字轉(zhuǎn)語音并讀出來,頂部彈框

   if (!offLine) {// offLine為NO表示在線的透傳消息。
       
    }else{// offLine為YES表示離線的透傳消息。
    
   }
}
靜默推送->服務(wù)端格式:
    $apn = new IGtAPNPayload();
    $apn->alertMsg="";
    $apn->sound="com.gexin.ios.silence";
    $apn->contentAvailable=1;
    $apn->badge=1;
    $apn->add_customMsg("msg",$msgContent);
靜默推送->客戶端格式:
{
  "aps" : {
    "content-available" : 1,// 必須為1
    "badge" : 1 // 角標,可有可無
     // 一定不能有alert,因為alert如果有內(nèi)容,在客戶端的通知欄/橫幅上會有通知。
  },
  "msg" : "有一條新的招工信息,點擊查看詳情" // 可有可無
}

服務(wù)端(我們公司是PHP)配置靜默推送的格式如下(非常嚴格,非常嚴格,非常嚴格,一項不滿足,就不是靜默推送,那就變成了普通的有文字有聲音的推送):

1.傳入的alertMsg對應(yīng)的值一定為空或者壓根就不傳alertMsg字段。

$apn->alertMsg="";
  1. contentAvailable的值一定為1
$apn->contentAvailable=1;

3.sound對應(yīng)的值一定為com.gexin.ios.silence.改成其他的字符串的話,應(yīng)用在后臺收到推送時,會聽到"鐺"的一聲。 或者sound對應(yīng)的值為任意常量也可以實現(xiàn)靜音(真機測試過一次,發(fā)現(xiàn)確實沒有聲音。測試次數(shù)過少,不是太敢斷定,如果有想測試的,可以將sound的值設(shè)置成常量試一下)。


$apn->sound="com.gexin.ios.silence";

4.其他的倒無關(guān)緊要了,不影響靜默推送的格式。


綜合1.2.3.4,靜默推送,php服務(wù)端要設(shè)置的核心代碼必定是下面的這種格式:
    $apn->alertMsg="";// alertMsg一定不要有值
    $apn->sound="com.gexin.ios.silence";
    $apn->contentAvailable=1;// 一定為1

以我們項目中靜默推送的實戰(zhàn)演練

關(guān)鍵代碼如下:
function IGtTransmissionTemplateDemo($appid,$appkey,$msgContent,$keyType,$keyId,$temp_ietm="",$client_notice="default"){
    $msg = array(
        'keyType' => $keyType,
        'keyId' => $keyId,
        'msg' => $msgContent,
        'nickname' => $temp_ietm
    );
    $msg = json_encode($msg);
    $template =  new IGtTransmissionTemplate();
    $template->set_appId($appid);//應(yīng)用appid
    $template->set_appkey($appkey);//應(yīng)用appkey
    $template->set_transmissionType(2);//透傳消息類型
    $template->set_transmissionContent($msg);//透傳內(nèi)容
  
    $apn = new IGtAPNPayload();
    $alertmsg=new DictionaryAlertMsg();
    $alertmsg->body=$msgContent;
    $alertmsg->actionLocKey="ActionLockey";
    $alertmsg->locKey=$msgContent;
    $alertmsg->locArgs=array("locargs");
    $alertmsg->launchImage="launchimage";
    //        IOS8.2 支持
    $alertmsg->title=SYS_ZH_NAME;
    $alertmsg->titleLocKey=SYS_ZH_NAME;
    $alertmsg->titleLocArgs=array("TitleLocArg");
    // $apn->alertMsg=$alertmsg;
    $apn->alertMsg="";
    $apn->sound="com.gexin.ios.silence";
    $apn->contentAvailable=1;
    $apn->badge=1;
    $apn->add_customMsg("payload","payload");
    $apn->add_customMsg("keyType",$keyType);
    $apn->add_customMsg("keyId",$keyId);
    $apn->add_customMsg("nickname",$nickname);
    $apn->add_customMsg("msg",$msgContent);
 
    $apn->category="ACTIONABLE";
    $template->set_apnInfo($apn);

    return $template;
}

來來來,一起截圖圈重點。
image.png
以我們公司做的產(chǎn)品為例:雇主在使用iOS客戶端發(fā)單的時候,后臺監(jiān)聽到雇主成功發(fā)單后,會訪問個推提供的某個SDK,經(jīng)過一系列的操作。最終iOS客戶端在后臺收到推送通知的時候,一定會執(zhí)行xcode中的如下代碼
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{  
    NSLog(@"%@",userInfo);
}

經(jīng)過真機調(diào)試,符合靜默推送(因為我的iOS真機設(shè)備在后臺收到推送時,沒有聲音,沒有文字,并且還執(zhí)行了一段xcode中的方法,方法就在下面),

以下截圖是采用靜默推送的方式,iOS客戶端在后臺收到通知時,執(zhí)行xcode中的下面的方法,打印的userInfo中的內(nèi)容。

  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;
// userInfo中的內(nèi)容
{
  "_gurl_" : "sdk.open.extension.getui.com:8123",
  "_gmid_" : "OSL-0613_EK270rsK7ZA3frD1xut5B5:6b5a07fe4ef9477caa22c01a93aed697:4f561d975e202fcdb57a47068c5b956b",
  "keyId" : "1134",
  "aps" : {
    "content-available" : 1,
    "mutable-content" : 1,
    "badge" : 1,
    "category" : "ACTIONABLE"
  },
  "keyType" : "7",
  "payload" : "payload",
  "msg" : "有一條新的招工信息,點擊查看詳情",
  "_ge_" : "1"
}

image.png

PS:既然已經(jīng)走到了這里,那么我們就可以實現(xiàn)這種惡搞的效果了:

用戶已經(jīng)將App退出到后臺,此刻來了一個推送,通知欄沒有標題和內(nèi)容,但是用戶能聽到一段語音。用戶很懵逼,不知道是哪個APP發(fā)出的聲音。
實現(xiàn)方法:按照上面的一模一樣的步驟配置成靜默推送。然后配置如下方法,因為下面的這個方法是靜默推送必定走的方法(我們在里面偷偷地寫上了文字轉(zhuǎn)語音的代碼,哈哈哈~~~)

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
   // 拿到userInfo中的關(guān)鍵內(nèi)容,然后用蘋果自帶的功能進行文字轉(zhuǎn)語音
}
image.png

靜默推送遇到的坑(靜默推送硬生生的做成了普通推送)。

下面就來看看由于我們公司的后臺,設(shè)置靜默推送不規(guī)范導(dǎo)致的iOS客戶端在后臺收到推送時,有聲音有文字的情況。本質(zhì)上變成了普通推送(有聲音有文字)。

我們公司的后臺說是 設(shè)置的是靜默推送,但實際上從他給我PHP文件來看,沒按照靜默推送的格式來。導(dǎo)致客戶端在后臺時,通知欄會有通知的內(nèi)容展示,同時也會有聲音。
這與靜默推送(收到推送,沒有聲音沒有文字)的標準相悖了,導(dǎo)致一直在這個問題上卡了很久。
在此記錄下來,以備不時之需,希望有遇到和我一樣問題的朋友,少走一些坑。


后臺設(shè)置的有問題的代碼
function IGtTransmissionTemplateDemo($appid,$appkey,$msgContent,$keyType,$keyId,$temp_ietm="",$client_notice="default"){
    $msg = array(
        'keyType' => $keyType,
        'keyId' => $keyId,
        'msg' => $msgContent,
        'nickname' => $temp_ietm
    );
    $msg = json_encode($msg);
    $template =  new IGtTransmissionTemplate();
    $template->set_appId($appid);//應(yīng)用appid
    $template->set_appkey($appkey);//應(yīng)用appkey
    $template->set_transmissionType(2);//透傳消息類型
    $template->set_transmissionContent($msg);//透傳內(nèi)容
   

    $apn = new IGtAPNPayload();
    $alertmsg=new DictionaryAlertMsg();
    $alertmsg->body=$msgContent;
    $alertmsg->actionLocKey="ActionLockey";
    $alertmsg->locKey=$msgContent;
    $alertmsg->locArgs=array("locargs");
    $alertmsg->launchImage="launchimage";
    //        IOS8.2 支持
    $alertmsg->title=SYS_ZH_NAME;
    $alertmsg->titleLocKey=SYS_ZH_NAME;
    $alertmsg->titleLocArgs=array("TitleLocArg");

    $apn->alertMsg=$alertmsg;
    $apn->contentAvailable=1;
    $apn->sound=$client_notice;
    $apn->badge=1;
    $apn->add_customMsg("payload","payload");
    $apn->add_customMsg("keyType",$keyType);
    $apn->add_customMsg("keyId",$keyId);
    $apn->add_customMsg("nickname",$nickname);
    $apn->add_customMsg("msg",$msgContent);
    $apn->category="ACTIONABLE";
    $template->set_apnInfo($apn);

    return $template;
}

截圖展示后臺設(shè)置的有問題的關(guān)鍵代碼
image.png

分析靜默推送格式不規(guī)范會出現(xiàn)哪些問題

以下情況滿足的前提條件:②的值為1,即靜默推送

  • ①是變量,當(dāng)①有值時,iOS客戶端在后臺收到推送時,通知欄會有推送標題和內(nèi)容的展示。

  • ①是變量,當(dāng)①沒有值時,iOS客戶端在后臺收到推送時,通知欄沒有推送標題和內(nèi)容的展示。

  • ③是變量,當(dāng)③有值時:

    • 如果xcode中放置的音頻文件和sound對應(yīng)的值一樣,那么iOS客戶端在后臺收到推送時,就會自動
      讀出音頻文件的聲音。
      - 的是的撒的
    • 如果xcode中放置的音頻文件和sound對應(yīng)的值不一樣,或者xcode中根本沒有音頻文件,那么iOS客戶端在后臺收到推送時,就會聽見鐺的一聲。
  • ③是變量,當(dāng)③沒有值時,那么iOS客戶端在后臺收到推送時,就會聽見鐺的一聲。

PS:以下①和③不是變量的情況。當(dāng)然仍滿足②是靜默推送
PHP后臺代碼中,將①設(shè)置成空字符串,iOS客戶端在后臺收到推送時,通知欄沒有推送標題和內(nèi)容的展示
PHP后臺代碼中,將③設(shè)置成非com.gexin.ios.silence的任意字符串或者不和xcode中的音頻文件重名的,這時iOS客戶端在后臺收到推送的時候,就會聽見鐺的一聲。


打印的內(nèi)容如下: 經(jīng)過測試iOS客戶端在后臺收到推送時,會讀取xcode中存放的音頻文件notice_type1.caf,同時通知欄會展示標題(一秒招聘) 和 內(nèi)容(有一條新的招工信息,點擊查看詳情)
{
  "_gurl_" : "sdk.open.extension.getui.com:8123",
  "_gmid_" : "OSL-0613_WzPFJBFf1BAXhORnt7bRn2:e34f8f8517034efa9773415a8d33190f:ada94b80070b9be823f25f8ea4577b92",
  "keyId" : "1131",
  "aps" : {
    "sound" : "notice_type1.caf",
    "content-available" : 1,
    "alert" : {
      "loc-args" : [
        "locargs"
      ],
      "title" : "一秒招聘",
      "title-loc-args" : [
        "TitleLocArg"
      ],
      "title-loc-key" : "一秒招聘",
      "action-loc-key" : "ActionLockey",
      "body" : "有一條新的招工信息,點擊查看詳情",
      "loc-key" : "有一條新的招工信息,點擊查看詳情",
      "launch-image" : "launchimage"
    },
    "mutable-content" : 1,
    "category" : "ACTIONABLE",
    "badge" : 1
  },
  "keyType" : "7",
  "payload" : "payload",
  "msg" : "有一條新的招工信息,點擊查看詳情",
  "_ge_" : "1"
}
以上xcode控制臺輸出的json數(shù)據(jù)若要符合靜默推送,那么必須做如下修改:對應(yīng)的讓服務(wù)端改掉對應(yīng)的內(nèi)容即可
image.png

注意:本地存放的音頻文件一定要放在該工作目錄下
image.png

PS:當(dāng)然,如果返回的json數(shù)據(jù)里面sound的值為"1"或者任意字符串就會出現(xiàn)鐺的一聲,如果sound的值能和xcode的該路徑下的音頻文件匹配上,那么iOS客戶端在后臺收到推送時,會自動讀出匹配到的音頻。


寫到這里我在想,如果公司沒有強制說要用戶在后臺的時候,不許在通知欄中展示內(nèi)容和標題以及發(fā)出聲音,那么你可以設(shè)置成在展示內(nèi)容和標題以及會發(fā)出聲音。此時content-available設(shè)置為0和1就沒有區(qū)別了,因為你只要保證如下條件滿足即可:


   // alert里面有內(nèi)容 ; 必須保證有值
   $apn->alertMsg=$alertmsg;
    // 靜默推送 1
    $apn->contentAvailable=1;
    // sound對應(yīng)的值是字符串com.gexin.ios.silence或者sound對應(yīng)的值是常量會靜音。 
    // sound對應(yīng)的值是常量,比如$apn->sound=1;會聽見鐺的一聲。
    // sound對應(yīng)的值是變量,如果xcode中的音頻文件名能和變量對應(yīng)起來,推送來的時候,會自動檢索xcode中的音頻文件,檢索到就會讀出來
    $apn->sound=$client_notice;

我們項目中有這么個需求,APP中所有的音頻要么采用文字轉(zhuǎn)語音,要么用錄制好的音頻文件,但是因為推送的內(nèi)容有變量,比如xxx簽到了您的家政服務(wù)工作,所以不能用錄制好的音頻文件。所以需求就這么出現(xiàn)了:
當(dāng)推送過來的時候(在線、離線),有通知、系統(tǒng)推送來的鐺的一聲沒做要求、 文字轉(zhuǎn)語音。明確規(guī)定,要對推送過來的通知內(nèi)容進行文字轉(zhuǎn)語音,不能用錄制好的音頻文件

分析(在線走個推,所以肯定能文字轉(zhuǎn)語音,這里就不說了,以下分析的是離線(APP在后臺運行/APP未啟動/APP被殺死)的情況),不考慮點擊通知進入APP的情況:
  • 如果單純采用標準的靜默推送,肯定達不到效果:因為只要符合靜默推送的格式,來推送的時候,沒有通知也沒有聲音(鐺的一聲)。

    • 當(dāng)程序在后臺的時候,推送來的時候,還能執(zhí)行一段方法(可以文字轉(zhuǎn)語音讀出來)。效果:通知欄沒有通知、鐺的一聲有無(看后臺配置的sound對應(yīng)的值)、文字轉(zhuǎn)語音。所以不符合
    • 當(dāng)APP被殺死或者APP未啟動的時候,推送來的時候,不會執(zhí)行這段方法(代碼都不走了,肯定沒法進行文字轉(zhuǎn)語音了)。效果:通知欄沒有通知、鐺的一聲有無(看后臺配置的sound對應(yīng)的值)、沒有文字轉(zhuǎn)語音。所以不符合
  • 如果單純采用標準的普通推送,肯定達不到效果

    • 當(dāng)程序離線(APP在后臺運行/APP未啟動/APP被殺死)的時候,推送來的時候,有通知,有聲音(鐺的一聲,不是文字轉(zhuǎn)語音的聲音),由于不能用錄制好的音頻文件,所以我將xcode里面的音頻文件刪除了,因此不會讀音頻文件。普通推送不點擊通知,離線不會走xcode項目里面的任何代碼,所以沒法進行文字轉(zhuǎn)語音。效果:通知欄有通知、鐺的一聲有無(看后臺配置的sound對應(yīng)的值)、沒有文字轉(zhuǎn)語音。所以不符合
  • 采用普通推送+靜默推送混合的方式,APP在后臺運行能符合要求,APP未啟動/APP被殺死不符合要求:
    先說一下普通推送+靜默推送混合的后臺大致格式,具體參考上面的代碼:

    // alert里面有內(nèi)容 。普通推送alert中有內(nèi)容
    $apn->alertMsg=$alertmsg;
    // 靜默推送 1  之所以設(shè)置為1,是為了走xcode里面的某個方法
    $apn->contentAvailable=1;
    // sound對應(yīng)的值是字符串com.gexin.ios.silence或者sound對應(yīng)的值是常量會靜音。 
    // sound對應(yīng)的值是常量,比如$apn->sound=1;會聽見鐺的一聲。
    // sound對應(yīng)的值是變量,如果xcode中的音頻文件名能和變量對應(yīng)起來,推送來的時候,會自動檢索xcode中的音頻文件,檢索到就會讀出來
    $apn->sound=1;// 有鐺的聲音
  • 當(dāng)程序在后臺的時候,推送來的時候,有通知,鐺的一聲有無(看后臺配置的sound對應(yīng)的值),同時還能執(zhí)行xcode里面的一段方法(該段方法里面寫了文字轉(zhuǎn)語音的代碼)。效果:通知欄有通知、鐺的一聲有無(看后臺配置的sound對應(yīng)的值)、文字轉(zhuǎn)語音。所以符合
  • 當(dāng)APP被殺死或者APP未啟動的時候,推送來的時候,通知欄有通知、鐺的一聲有無(看后臺配置的sound對應(yīng)的值)、沒有文字轉(zhuǎn)語音。所以不符合
所以,針對我們公司的要求,只能采用普通推送+靜默推送混合的方式,這種方式APP在后臺的時候滿足公司的需求,APP被殺死或者APP未啟動的時候,不滿足需求,這是蘋果的機制問題,這是最能契合公司需求的做法了,目前只能這么做,如果有其他方法,朋友們麻煩@一下我哦。

................................

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容