• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網絡科技有限公司!
    電話圖標 余先生:13699882642

    網站百科

    為您解碼網站建設的點點滴滴

    Flutter注冊iOS推送

    發表日期:2018-11 文章編輯:小燈 瀏覽次數:3183

    在進行iOS上開發,發現Flutter創建的項目不走didRegisterForRemoteNotificationsWithDeviceToken,起初以為是沒有設置UNUserNotificationCenterDelegate,后來發現AppDelegate是繼承于FlutterAppDelegate的,


    也就是將原生的UIApplicationDelegate的方法都會被FlutterAppDelegate攔截,即使我們不實現didRegisterForRemoteNotificationsWithDeviceToken,我覺得應該有兩種方法可以實現:第一種是需要重寫父類的推送方法。第二種就是在dart文件中監聽系統代理,通過通道回調appdelegate來實現,

    下面是百度云推送,重寫父類代理的實現:

    在didFinishLaunchingWithOptions launchOptions: 中注冊原生交互channel


    override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? ) -> Bool {

    ? ? ? ? //Flutter Plugin插件注冊

    ? ? ? ? GeneratedPluginRegistrant.register(with: self);

    ? ? ? ? //調用appdelegate 的 設置、注冊遠程推送

    ? ? ? ? self.requestAuthorization(application: application);

    ? ? ? ? //Flutter原生交互通道

    ? ? ? ? self.BPushChannel();

    ? ? ? ? //注冊BPush通道

    ? ? ? ? BPush.registerChannel(launchOptions, apiKey: BPushKey, pushMode: BPushMode.development, withFirstAction: "打開", withSecondAction: "關閉", withCategory: nil, useBehaviorTextInput: true, isDebug: true);

    ? ? ? ? //禁用地理位置信息推送

    ? ? ? ? BPush.disableLbs();

    ? ? ? ? return super.application(application, didFinishLaunchingWithOptions: launchOptions);

    ? ? }


    ? ? //MARK:注冊遠程推送通知

    ? ? func requestAuthorization(application: UIApplication) {

    ? ? ? ? if #available(iOS 10.0, *) {

    ? ? ? ? ? ? UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate;

    ? ? ? ? ? ? UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert]) { (granted, error) in

    ? ? ? ? ? ? ? ? if granted == true {

    ? ? ? ? ? ? ? ? ? ? DispatchQueue.main.async {

    ? ? ? ? ? ? ? ? ? ? ? ? application.registerForRemoteNotifications()

    ? ? ? ? ? ? ? ? ? ? }

    ? ? ? ? ? ? ? ? }

    ? ? ? ? ? ? }

    ? ? ? ? } else if #available(iOS 8.0, *) {

    ? ? ? ? ? ? let types:UIUserNotificationType = [.badge , .alert , .sound]

    ? ? ? ? ? ? let settings:UIUserNotificationSettings = UIUserNotificationSettings(types: types, categories: nil)

    ? ? ? ? ? ? application.registerUserNotificationSettings(settings)

    ? ? ? ? } else {

    ? ? ? ? ? ? let types:UIRemoteNotificationType = [UIRemoteNotificationType.alert, UIRemoteNotificationType.badge, .sound]

    ? ? ? ? ? ? application.registerForRemoteNotifications(matching: types)

    ? ? ? ? }

    ? ? }


    ? ? //百度推送通道

    ? ? func BPushChannel() -> Void {

    ? ? ? ? //獲取系統的跟控制器

    ? ? ? ? let controller = self.window.rootViewController

    ? ? ? ? //建立rootViewController和Flutter的通信通道

    ? ? ? ? let pushChannel = FlutterMethodChannel.init(name: channelNameForPush, binaryMessenger:controller as! FlutterBinaryMessenger)

    ? ? ? ? //設置Method回調?FlutterMethodCall包含了method的Name,ID等信息,?FlutterResult是給Native和Flutter的通信回調

    ????????pushChannel.setMethodCallHandler { (FlutterMethodCall, FlutterResult) in

    ? ? ? ? ? ? print("pushChannel");

    ? ? ? ? }

    ? ? ? ? //綁定channelId到服務器

    ? ? ? ? let pushBind = FlutterMethodChannel.init(name:channelNameForPushBind, binaryMessenger: controller as! FlutterBinaryMessenger)

    ? ? ? ? pushBind.setMethodCallHandler { (FlutterMethodCall, FlutterResult) in

    ? ? ? ? ? ? //FlutterResult();結果回調,回調的結果只能為string類型

    ? ? ? ? ? ? if(self.channelId.isEmpty){

    ? ? ? ? ? ? ? ? FlutterResult(FlutterMethodNotImplemented);

    ? ? ? ? ? ? } else{

    ? ? ? ? ? ? ? ? print("channelId",self.channelId);

    ? ? ? ? ? ? ? ? let dic : Dictionary<String,String> = ["channelId":self.channelId];

    ? ? ? ? ? ? ? ? let data = try? JSONSerialization.data(withJSONObject: dic, options: [])

    ? ? ? ? ? ? ? ? let encodingStr = String(data: data!, encoding: String.Encoding.utf8)!

    //將信息傳到Flutter,

    ? ? ? ? ? ? ? ? FlutterResult(encodingStr);

    ? ? ? ? ? ? }

    ? ? ? ? }

    ? ? }


    ? ? // 重寫遠程推送通知 注冊成功

    ? ? override func application(_ application: UIApplication , didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data) {

    ? ? ? ? //? 向云推送注冊 device token

    ? ? ? ? print("deviceToken = %@", deviceToken);

    ? ? ? ? BPush.registerDeviceToken(deviceToken as Data)

    ? ? ? ? // 綁定channel.將會在回調中看獲得channnelid appid userid 等

    ? ? ? ? BPush.bindChannel(completeHandler: { (result, error) -> Void in

    ? ? ? ? ? ? if ((result) != nil){

    ? ? ? ? ? ? ? ? self.channelId = BPush.getChannelId();

    ? ? ? ? ? ? ? ? BPush.setTag("MyTag", withCompleteHandler: { (result, error) -> Void in

    ? ? ? ? ? ? ? ? ? ? if ((result) != nil){

    ? ? ? ? ? ? ? ? ? ? }

    ? ? ? ? ? ? ? ? })

    ? ? ? ? ? ? }

    ? ? ? ? })

    ? ? ? ? super.application(application, didRegisterForRemoteNotificationsWithDeviceToken:deviceToken)

    ? ? }


    // 重寫注冊失敗

    ? ? override func application(_ application: UIApplication , didFailToRegisterForRemoteNotificationsWithError error: Error ) {

    ? ? ? ? print("deviceToken = %@", error)

    ? ? ? ? super.application(application, didFailToRegisterForRemoteNotificationsWithError: error)

    ? ? }


    **如果解決了你的問題,點個贊唄!**


    本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.juherenli.com/17649.html
    相關APP開發
     八年  行業經驗

    多一份參考,總有益處

    聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

    咨詢相關問題或預約面談,可以通過以下方式與我們聯系

    業務熱線:余經理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    国产伦精品一区二区| 久久精品国产99精品最新| 亚洲一区精品视频在线| 精品视频一区二区三区| 少妇人妻精品一区二区| 99精品一区二区免费视频| 国产精品美女网站| 国语精品91自产拍在线观看二区| 99久久精品国产片久人| 久久久久亚洲精品天堂久久久久久 | 污污网站国产精品白丝袜| 久久久国产精品四虎| 久久精品国产亚洲香蕉| 夜夜爽一区二区三区精品| 久久精品人人做人人爱爱| 91精品国产亚洲爽啪在线影院| 国产在线91精品入口| 伊人 久久 精品| 日本一区二区三区精品视频 | 在线视频精品一区| 国产成人精品日本亚洲专| 久久亚洲精品中文字幕无码 | 久久精品国产亚洲av麻豆小说| 97精品国产91久久久久久| 成人精品综合免费视频| 国产视频精品免费| 久久亚洲精品高潮综合色a片| 精品人妻无码区二区三区| 99无码精品二区在线视频| 日本精品久久久久中文字幕| 久久精品一区二区三区中文字幕| 国产午夜精品1区2区3福利| 午夜精品在线视频| 亚洲午夜精品一区二区麻豆| 国产成人精品日本亚洲专| 亚洲国产高清在线精品一区| 一级香蕉精品视频在线播放| 国产国产精品人在线视| 日韩精品在线观看视频| 日韩精品在线视频| 久久精品国产亚洲AV果冻传媒 |