HBuilder wird zum Schreiben von H5-Projekten verwendet, und Xcode wird zum Schreiben von nativen iOS-Plug-Ins verwendet. Was ich erreichen muss, ist, auf der H5-Seite auf „Drucken“ zu klicken und das native iOS-Plug-In auszuführen, um eine Verbindung zum Bluetooth-Drucker herzustellen und drucken Sie den erhaltenen Inhalt aus.
Gehen Sie zunächst zur HBuilder-Dokumentation, laden Sie das SDK für die Offline-Paketierung der iOS-Version von HBuilder herunter, führen Sie HBuilder-Hello aus und starten Sie die native Plug-In-Entwicklung basierend auf dem HBuilder-Hello-Projekt.
Die HTML5+-Basiserweiterung verwendet eine dreischichtige Struktur: JS-Schicht, PluginBridge-Schicht und native Schicht. Die drei Funktionsebenen sind:
JS-Ebene: Wird auf der Webview-Seite aufgerufen, löst den Code der nativen Ebene aus und erhält die Ausführungsergebnisse. PluginBridge-Ebene: Verarbeiten Sie die JS-Ebenenanforderung und lösen Sie den Plugin-Code der Native-Ebene-Erweiterung aus.
Native Ebene: Der plattformnative Code der Plug-in-Erweiterung ist für die Ausführung der Geschäftslogik und die Rückgabe der Ausführungsergebnisse an die angeforderte Seite verantwortlich.
Registrieren Sie zunächst die entsprechende Beziehung
Ändern Sie die Datei feature.plist in PandoraAPI.bundle und fügen Sie die entsprechende Beziehung zwischen dem JS-Plug-In-Alias und der Native-Plug-In-Klasse hinzu. Die SDK-Basis findet und Generieren Sie die entsprechende Beziehung basierend auf dem entsprechenden nativen Objekt und führen Sie die entsprechende Methode aus.
plugintest ist der Klassenname der Plug-in-Klasse, die Sie erweitern möchten. Erstellen Sie die Plugintest-Klasse in iOS und erben Sie sie von PGPlugin.h in .h, PGMethod.h.
#include "PGPlugin.h" #include "PGMethod.h"
Wenn Sie eine statische Bibliothek benötigen, ziehen Sie einfach die .a- und .h-Dateien in das Projekt. Die Methoden in native sind in synchrone und asynchrone Methoden unterteilt. Ich stelle hier nur die asynchronen Methoden vor 🎜> in js Funktionen in
- (void)PluginTestFunctionArrayArgu:(PGMethod *)msg { NSArray *pArray = [NSArray array]; if (msg) { //CallBackid 异步方法的回调id,H5+ 会根据回调ID通知JS层运行结果成功或者失败 NSString *cdId = [msg.arguments objectAtIndex:0]; //用户的参数会在第二个参数传回,可以按照Array方式传入 pArray = [msg.arguments objectAtIndex:1]; NSLog(@"cdId: %@ pArray: %@",cdId,pArray); // 如果使用Array方式传递参数 NSString *pResultString = [NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ %@",[pArray objectAtIndex:0],[pArray objectAtIndex:1], [pArray objectAtIndex:2],[pArray objectAtIndex:3],[pArray objectAtIndex:4], [pArray objectAtIndex:5],[pArray objectAtIndex:6]]; NSLog(@"pResultString: %@",pResultString); //可以直接调用所导入的静态库里面的方法 NSString *UUID = [ZQDeviceSDK Prn_GetPortList:1]; NSString *port = [UUID stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; [self startPrintText:pArray andUUID:port]; // 运行Native代码结果和预期相同,调用回调通知JS层运行成功并返回结果 PDRPluginResult *result = [PDRPluginResult resultWithStatus:PDRCommandStatusOK messageAsString:pResultString]; // 如果Native代码运行结果和预期不同,需要通过回调通知JS层出现错误,并返回错误提示// PDRPluginResult *resultError = [PDRPluginResult resultWithStatus:PDRCommandStatusError messageAsString:@"出错了!"]; //通知JS层Native层运行结果,JS Pluginbridge会根据cbid找到对应的回调方法并触发 [self toCallback:cdId withReslut:[result toJSONString]]; } }
Code in H5 aufgerufen
document.addEventListener( "plusready", function(){ // 声明的JS“扩展插件别名” var _BARCODE = 'plugintest',B = window.plus.bridge; var plugintest ={ // 声明异步返回方法 // 通知Native层plugintest扩展插件运行”PluginTestFunction”方法 //参数为所需传入原生的参数 PluginTestFunctionArrayArgu : function (Argus, successCallback, errorCallback ){ var success = typeof successCallback !== 'function' ? null : function(args) { successCallback(args); }, fail = typeof errorCallback !== 'function' ? null : function(code) { errorCallback(code); }; callbackID = B.callbackId(success, fail); //这里写上原生中的异步方法名 return B.exec(_BARCODE, "PluginTestFunctionArrayArgu", [callbackID, Argus]); } window.plus.plugintest = plugintest; }, true );
Der allgemeine Entwicklungsprozess ist so. Tatsächlich liegt das eigentliche Problem nicht im Code, sondern in den verschiedenen Aspekten des IDE-Debuggings..
Im Folgenden wird das H5-Projekt in Xcode importiert, um die Offline-Verpackung zu implementieren. Ändern Sie die App-ID in der Datei manifest.json des Projekts, sodass sie mit der App-ID in Xcode-Version und Build übereinstimmt entsprechen dem Namen und Code unter Versionplus.plugintest.PluginTestFunctionArrayArgu( printData, function( result ) { mui.alert( result ); },function(result){ mui.alert(result) });
Löschen Sie alle chinesischen Kommentare in manifest.json und importieren Sie dann das H5-Projekt in das www-Verzeichnis unter Pandora. Denken Sie daran, alle Dateien unter dem Projekt in www zu importieren, nicht das Projekt Gehen Sie direkt zu www. Wenn Sie es auf diese Weise ausführen, können Sie die App nicht öffnen.
Kostenloses h5-Online-Video-Tutorial
2. HTML5-Vollversionshandbuch
3. php.cn Original-HTML5-Video-Tutorial
Das obige ist der detaillierte Inhalt vonBeispielcode für die H5-Projektentwicklung der iOS-Plug-in-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!