gpt4 book ai didi

iOs - 如何使用 url 将数据从小部件(今日扩展)传递到应用程序?

转载 作者:行者123 更新时间:2023-11-28 08:25:36 24 4
gpt4 key购买 nike

我正在尝试开发一个小部件(今天的扩展),它将一堆数据传递给主应用程序。

我在 info.plist 中添加了这个

<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>TodayWidget</string>
</array>
<key>CFBundleURLName</key>
<string>xxx.xxx.xxx</string>
</dict>
</array>

然后我使用这段代码(成功地)从小部件调用了应用程序

    let url = URL(string:"TodayWidget://?key=value")
self.extensionContext?.open(url!, completionHandler: nil)

我如何访问这些值?

我也看到了这个,但是 xcode 警告我代码已被弃用

Pass data between two Apps by url scheme in swift?

谢谢!

最佳答案

首先你的方案使用是错误的...... CFBundleURLSchemes 是从外部引用你的应用程序,而不是专门用于你的扩展。更好的用法是:

let url = URL(string:"yourAppName://TodayWidget?key=value")
let url = URL(string:"yourAppName://action?param1=value1&param2=value2")

然后你可以识别来源或 Action ......这是从您的参数中获取字典的代码(url 来自 application:openURL)

根据您的需要调整验证。

if (!url) return NO;
if ([url.absoluteString rangeOfString:@"://"].location == NSNotFound) return NO;
if ([url.absoluteString rangeOfString:@"?"].location == NSNotFound) return NO;

NSMutableDictionary* queryString = [NSMutableDictionary dictionaryWithCapacity:1];

__block NSMutableDictionary* paramDict = [[NSMutableDictionary alloc]init];
[paramDict setValue:[url scheme] forKey:@"protocol"];
[paramDict setValue:[url absoluteString] forKey:@"url"];
[paramDict setValue:[[url.absoluteString componentsSeparatedByString:@"://"][1] componentsSeparatedByString:@"?"].firstObject forKey:@"path"];
[paramDict setValue:queryString forKey:@"parameters"];

NSString* urlString = [url.absoluteString stringByRemovingPercentEncoding];
NSString* paramString = [urlString componentsSeparatedByString:@"?"][1];
NSArray* params = [paramString componentsSeparatedByString:@"&"];

for (NSString* param in params)
{
NSArray* paramArray = [param componentsSeparatedByString:@"="];
if (paramArray.count != 2) {
NSLog(@"Malformated url:%@", urlString);
continue;
}

NSString* key = paramArray[0];
NSString* value = paramArray[1];

if (!key.length | !value.length) {
NSLog(@"Malformated key %@ value %@ in url:%@", key, value, urlString);
continue;
}
[queryString setValue:value forKey:key];
}
NSLog(@"%@", [paramDict toJSONString]);

关于iOs - 如何使用 url 将数据从小部件(今日扩展)传递到应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40108356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com