我的AirPrint代码是否会连接到仅限IPv6的打印机?

时间:2016-06-08 09:36:52

标签: printing airprint ios9.3

以下是我连接到IPv4打印机的代码。一切都很好。

NSString *printerURL = @"ipp://192.168.1.3:631/ipp/print" //IPv4 : OK

UIPrinter *myPrint = [UIPrinter printerWithURL:[NSURL URLWithString:printerURL]];
    [myPrint contactPrinter:^(BOOL available) {
        if(!available){
            // Show error
        }
        [printInteraction printToPrinter:myPrint completionHandler:^(UIPrintInteractionController * _Nonnull printInteractionController, BOOL completed, NSError * _Nullable error) {
            // Print
        }];
    }];

因为我没有IpV6打印机,所以我不知道下面的代码会发生什么:

NSString *printerURL = @"ipp://FE80::FE3F:DBFF:FE51:6BA:631/ipp/print" //IPv6 : ????

它会连接到IPv6打印机吗?

1 个答案:

答案 0 :(得分:1)

我既没有IPv6打印机,也没有支持AirPrint的设备。

但我向您提出建议,如何测试您的代码是否适用于IPv6连接:

  • 使用MacBook假冒环境,使您的LAN / WLAN中的iOS设备认为他们“看到”并可以连接到AirPrint设备。

以下是详细步骤:

  1. 确保为MacBook分配了IPv6地址。 (你如何做到这一点超出了这个答案的范围。)

  2. 通过向cupsd.conf添加一行,确保MacBook的CUPS服务仅允许IPv6连接:

     Listen [xxxx::xxxx:xxxx:xxxx:xxxx]:631
     Listen  /private/var/run/cupsd
     # Port 631
    
  3. 确保您的cupsd.conf也有此行:

     DefaultAuthType None
    

    这可确保您无需在IPv6和AirPrint功能之上调试身份验证授权问题。 (一旦您当前的问题得到解决,您可以稍后再更改。)

  4. 在MacBook上创建共享打印队列,并将其命名为abcd。队列不需要连接到AirPrint设备 - 任何其他打印机都“足够好”。此外,只要您的MacBook可以连接打印机,打印机也可以是仅限IPv4,USB或蓝牙。 (你如何做到这一点超出了这个答案的范围。)

  5. 测试您的打印机:确保您的MacBook打印到它,并确保其他客户端能够打印到共享队列。

  6. 您的Mac客户端现在可以“查看”并使用您的abcd打印队列 - 但您的iOS客户端(尚未)会看到AirPrint设备。

  7. 现在使用dns-sd实用程序向本地网络宣布一个虚假的AirPrint设备,指向名为abcd的真实打印队列。该命令的一般语法是:

    dns-sd -P <Name> <Type> <Domain> <Port> <Hostname> <IP> [<TXT>...]
    

    现在运行实际命令,打开一个Terminal.app窗口并输入:

     dns-sd                 \
       -P AirPrint-abcd     \
       _ipp._tcp,_universal \
       local.               \
       631                  \
       mymacbook.local.                     \
         xxxx::xxxx:xxxx:xxxx:xxxx          \
         pdl="application/pdf,image/urf"    \
         kind="document"                    \
         priority="1"                       \
         product="Model Name of my Printer" \
         rp="printers/abcd"                 \
         URF="DM3"                          \
         Duplex="T"                         \
         Color="T"                          \
         note="Testing AirPrint on MacBook" \
         txtvers="1"                        \
         qtotal="1"                         \
         printer-type="0x0480FFFC"          \
         printer-state="3"                  \
         air="none"                         \
         UUID="54321abc-1234-1234-abcd-ffa8e4bdcbf8"
    

    在这里,

    • xxxx::xxxx:xxxx:xxxx:xxxx 是MacBook的IPv6地址
    • mymacbook 是MacBook的主机名
  8. 现在,您的iOS客户端应该能够查看和使用名为AirPrint-abcd的AirPrint设备。服务公告还告诉他们,这个AirPrinter的连接路径是MacBook的IPv6地址,使用的端口是631。

  9. 附加说明:

    -P实用程序的 dns-sd 参数将向您的本地LAN / WLAN发出Bonjour“代理公告”。有关此实用程序的详细信息,请参阅 man dns-sd 。有关更多背景信息,请参阅dns-sd.orgthese other answers