正如我们所知道的Facebook SDK,我们应该在App Plist中提供网址类型和 FacebookAppID 键。
我的问题是如何以编程方式存储它们而无需在plist中手动输入它们,例如UIApplicationDelegate
方法didFinishLaunchingWithOptions
。
我尝试使用NSUserDefaults
设置它,但它会继续发出此错误:
No AppID provided; either pass an AppID to init, or add a string valued key with the appropriate id named FacebookAppID to the bundle *.plist'
我不知道为什么,但我猜Xcode使用NSUserDefaults
将密钥存储在默认应用Plist的其他地方。
有谁知道如何解决这个问题?
答案 0 :(得分:7)
这似乎对我有用,设置应用ID:
[FBSettings setDefaultAppID: @"123456789"];
我不知道网址类型是否有类似内容。但是,我可以想象注册URL类型是iOS在安装应用程序时所做的事情,因此如果是这样的话,它可能需要在plist文件中,而不是在代码中。
答案 1 :(得分:1)
由于某种原因,它不安全。获取应用程序plist文件并阅读所有信息非常容易。您应该保护您的应用私钥安全。但是如果你真的想这样做,你可以解析plist文件中的数据:
NSString *path = [[NSBundle mainBundle] pathForResource:@"yourPlistFileName" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc]initWithContentsOfFile:path];
NSLog(@"You app key is %@",[dict objectForKey:@"yourKeyFromPlist"]);
在所有应用中存储共享内容的最简单方法是使用NSUserDefaults。但是,在进行任何更改后,请不要忘记调用同步。 Here is NSUserDefaults documentation.我认为这不是一个很好的解决方案,可以将任何数据写入你的plist,但如果你真的想要,这里有一个代码:
NSString* plistPath = nil;
NSFileManager* manager = [NSFileManager defaultManager];
if ((plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"yourPlistFileName.plist"]))
{
if ([manager isWritableFileAtPath:plistPath])
{
NSMutableDictionary* infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
[infoDict setObject:@"your key value" forKey:@"Your Key"];
[infoDict writeToFile:plistPath atomically:NO];
[manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil];
}
}
答案 2 :(得分:0)
以下是我在Swift中为Facebook SDK解决的问题:
var appid: NSMutableDictionary = ["FacebookAppID": "123456789"]
var plistPath = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")
appid.writeToFile(plistPath!, atomically: true)
var appName: NSMutableDictionary = ["FacebookDisplayName": "AppName-Test"]
appName.writeToFile(plistPath!, atomically: true)
var urlStuff = NSMutableDictionary(contentsOfFile: plistPath!)
var urlType = NSDictionary(objectsAndKeys: "com.appprefix.AppName", "CFBundleURLName", NSArray(object: "fb123456789"), "CFBundleURLSchemes")
urlStuff?.setObject(NSArray(object: urlType), forKey: "CFBundleURLTypes")
urlStuff?.writeToFile(plistPath!, atomically: true)
您应该使用自己的FB内容更改我输入的占位符值。