Swift - JPush極光推送的使用4(根據Tag標籤,給同一類別使用者發推送)

ldear發表於2017-08-21

Swift - JPush極光推送的使用4(根據Tag標籤,給同一類別使用者發推送)

一、標籤(tag)介紹
(1)前文講的別名(alias)是為了對每一個使用者進行標識。而標籤(tag)是用來將使用者分類分組,這樣便於批量推送訊息。
(2)可為每個使用者打多個標籤。(比如: vipwomengame 等等)
(3)不同應用程式、不同的使用者,可以打同樣的標籤。
(4)每次呼叫至少設定一個 tag。(這個會覆蓋之前的設定,不是新增。)
(5)使用空陣列或列表表示取消之前的設定。

二、標籤使用要求
(1)有效的標籤組成:字母(區分大小寫)、數字、下劃線、漢字。
(2)限制:每個 tag 命名長度限制為 40 位元組,最多支援設定 100 tag,但總長度不得超過 1K 位元組。(判斷長度需採用 UTF-8 編碼)
(3)單個裝置最多支援設定 100 tagApp 全域性 tag 數量無限制。

三、標籤使用的樣例說明
下面給某些標籤下關聯的所有使用者傳送通知訊息。
1,iOS客戶端介面
客戶端在啟動後,我們可以選擇我們關注的新聞類別(每個類別對應一個標籤)。點選“註冊標籤”按鈕後,便呼叫 API 將該裝置與選擇的標籤關聯起來。
原文:Swift - JPush極光推送的使用4(根據Tag標籤,給同一類別使用者發推送)

               
2,服務端介面
我們輸入標籤(如果給多個標籤傳送,則用逗號隔開)、訊息文字,點選“推送”按鈕後,即可給這些標籤對應的所有使用者傳送訊息。
原文:Swift - JPush極光推送的使用4(根據Tag標籤,給同一類別使用者發推送)

原文:Swift - JPush極光推送的使用4(根據Tag標籤,給同一類別使用者發推送)


3,客戶端顯示效果
可以看到關聯了這些標籤的裝置能收到訊息,而其他的裝置是收不到的。
原文:Swift - JPush極光推送的使用4(根據Tag標籤,給同一類別使用者發推送)

四、完整程式碼
1,客戶端程式碼
(1)AppDelegate.swift(這個同之前文章裡的一樣,沒有改變。本文程式碼已升級至 Swfit3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import UIKit
 
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
     
    var window: UIWindow?
     
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions
                        launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
       
        //通知型別(這裡將聲音、訊息、提醒角標都給加上)
        let userSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound],
                                                      categories: nil)
        if ((UIDevice.current.systemVersion as NSString).floatValue >= 8.0) {
            //可以新增自定義categories
            JPUSHService.register(forRemoteNotificationTypes: userSettings.types.rawValue,
                                                            categories: nil)
        }
        else {
            //categories 必須為nil
            JPUSHService.register(forRemoteNotificationTypes: userSettings.types.rawValue,
                                                            categories: nil)
        }
         
        // 啟動JPushSDK
        JPUSHService.setup(withOption: nil, appKey: "7b96331738ea713195698fd",
                                     channel: "Publish Channel", apsForProduction: false)
 
        return true
    }
  
     
    func application(_ application: UIApplication,
                     didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        //註冊 DeviceToken
        JPUSHService.registerDeviceToken(deviceToken)
    }
     
    func application(_ application: UIApplication,
                     didReceiveRemoteNotification userInfo: [AnyHashable : Any],
                     fetchCompletionHandler
                        completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        //增加IOS 7的支援
        JPUSHService.handleRemoteNotification(userInfo)
        completionHandler(UIBackgroundFetchResult.newData)
    }
     
    func application(_ application: UIApplication,
                     didFailToRegisterForRemoteNotificationsWithError error: Error) {
        //可選
        NSLog("did Fail To Register For Remote Notifications With Error: \(error)")
    }
     
    //..........
}

(2)ViewController.swift(標籤註冊相關)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import UIKit
 
class ViewController: UIViewController {
 
    @IBOutlet weak var switch1: UISwitch!
    @IBOutlet weak var switch2: UISwitch!
    @IBOutlet weak var switch3: UISwitch!
    @IBOutlet weak var textView: UITextView!
     
    override func viewDidLoad() {
        super.viewDidLoad()
    }
     
    //按鈕點選
    @IBAction func btnTouchUp(sender: AnyObject) {
        //獲取標籤
        var tags = Set<NSObject>()
        if switch1.on {
            tags.insert("movie")
        }
        if switch2.on {
            tags.insert("music")
        }
        if switch3.on {
            tags.insert("game")
        }
         
        //註冊標籤
        JPUSHService.setTags(tags,
                              callbackSelector: #selector(tagsAliasCallBack(_:tags:alias:)),
                              object: self)
    }
     
    //標籤註冊回撥
    func tagsAliasCallBack(resCode:CInt, tags:NSSet, alias:NSString) {
        textView.text = "響應結果:\(resCode)"
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

2,服務端程式碼(index.php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?
//引入程式碼
require 'JPush/autoload.php';
 
use JPush\Client as JPush;
 
if(isset($_POST["message"])){
  //初始化
  $app_key = "7b528333738ec729165798fd";
  $master_secret = "32da4e2c36957b247a2c9828";
  $client = new JPush($app_key, $master_secret);
 
  //將逗號隔開的字串拆分成標籤陣列
  $tags = explode(',', $_POST["tags"]);
 
  //簡單的推送樣例
  $result = $client->push()
      ->setPlatform('ios', 'android')
      ->addTag($tags)
      ->setNotificationAlert($_POST["message"])
      ->options(array(
          "apns_production" => true  //true表示傳送到生產環境(預設值),false為開發環境
        ))
      ->send();
 
  echo 'Result=' . json_encode($result);
}
?>
<html>
  <head>
  </head>
  <body>
    <form action="index.php" method="post">
      標籤:<input type="text" name="tags"/><br>
      訊息:<input type="text" name="message"/>
      <button type="submit">推送廣播通知</button>
    </form>
  </body>
</html>

原文出自:www.hangge.com  轉載請保留原文連結:http://www.hangge.com/blog/cache/detail_1272.html

相關文章