Macos OSX上的Firemonkey自定义url方案
试图找出如何从FireMonkey OSX应用程序处理自定义URL方案。到目前为止,我已经设法将URL方案的详细信息添加到info.plist文件中,以便在单击链接时调用应用程序。问题在于注册事件处理程序,以便将请求的实际内容传递到应用程序中 有很多使用IFMXApplicationEventService在iOS上实现这一点的例子,但是OSX上似乎没有这个接口 有人知道如何处理这个问题吗?在Victor Fedorenkov的帮助下,我编写了一个COCOA URL处理程序,以获取请求的实际内容:Macos OSX上的Firemonkey自定义url方案,macos,delphi,firemonkey,Macos,Delphi,Firemonkey,试图找出如何从FireMonkey OSX应用程序处理自定义URL方案。到目前为止,我已经设法将URL方案的详细信息添加到info.plist文件中,以便在单击链接时调用应用程序。问题在于注册事件处理程序,以便将请求的实际内容传递到应用程序中 有很多使用IFMXApplicationEventService在iOS上实现这一点的例子,但是OSX上似乎没有这个接口 有人知道如何处理这个问题吗?在Victor Fedorenkov的帮助下,我编写了一个COCOA URL处理程序,以获取请求的实际内容
unit W3DConnectParamManagerImpl;
interface
uses
Macapi.Foundation
, Macapi.ObjCRuntime
, Macapi.ObjectiveC
;
type
TOpenURLEvent = procedure(const AURL: string) of object;
IURLEventHandler = interface(IObjectiveC)
['{1AB197A9-FF38-442F-A942-48E2528CAC1E}']
procedure HandleGURLEvent(Event, ReplyEvent: NSAppleEventDescriptor); cdecl;
end;
TURLEventHandler = class(TOCLocal, IURLEventHandler)
FOpenURLEvent: TOpenURLEvent;
public
constructor Create(AOpenURLEvent: TOpenURLEvent);
procedure HandleGURLEvent(Event, ReplyEvent: NSAppleEventDescriptor); cdecl;
end;
TW3DConnectParamManager = class(TInterfacedObject)
private
FURLEventHandler: IURLEventHandler;
procedure OpenURLHandler(const AURL: string);
public
constructor Create; reintroduce;
end;
implementation
uses
// Delphi
Macapi.Helpers
, SysUtils
;
{ TW3DConnectParamManager }
// Create
//
constructor TW3DConnectParamManager.Create;
const
kAEGetURL: Integer =
Ord('G') shl 24 + Ord('U') shl 16 + Ord('R') shl 8 + Ord('L'); //'GURL'
kInternetEventClass: Integer =
Ord('G') shl 24 + Ord('U') shl 16 + Ord('R') shl 8 + Ord('L'); //'GURL'
var
LAppleEventManager: NSAppleEventManager;
selector: SEL;
begin
inherited Create;
FURLEventHandler := TURLEventHandler.Create(OpenURLHandler);
LAppleEventManager := TNSAppleEventManager.Wrap(
TNSAppleEventManager.OCClass.sharedAppleEventManager);
selector := sel_registerName(PAnsiChar('HandleGURLEvent:ReplyEvent:'));
LAppleEventManager.setEventHandler((FURLEventHandler as ILocalObject).GetObjectID, selector,
kInternetEventClass,
kAEGetURL);
end;
// OpenURLHandler
//
procedure TW3DConnectParamManager.OpenURLHandler(const AURL: string);
begin
// ... use the url
end;
{ TURLEventHandler }
// Create
//
constructor TURLEventHandler.Create(AOpenURLEvent: TOpenURLEvent);
begin
inherited Create;
FOpenURLEvent := AOpenURLEvent;
end;
// HandleGURLEvent
//
procedure TURLEventHandler.HandleGURLEvent(Event, ReplyEvent: NSAppleEventDescriptor);
const
keyDirectObject: Integer = Ord('-') shl 24 + Ord('-') shl 16 + Ord('-') shl 8 + Ord('-'); //'----'
var
LURL: string;
begin
LURL := NSStrToStr(Event.paramDescriptorForKeyword(keyDirectObject).stringValue);
FOpenURLEvent(LURL);
end;
end.
有关信息,自定义URL方案将通过在Info.plist文件中添加以下行来启动您的应用程序:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>dontknowforwhatitisused</string>
<key>CFBundleURLSchemes</key>
<array>
<string>thecustomscheme</string>
</array>
</dict>
</array>
CbundleUrlTypes
CFBundleURLName
不知道你用了什么
循环流化床锅炉方案
客户模式
你找到答案了吗?我的处境也一样