如何以编程方式存储Facebook AppID密钥

时间:2012-12-25 11:55:54

标签: objective-c ios facebook-ios-sdk

正如我们所知道的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的其他地方。

有谁知道如何解决这个问题?

3 个答案:

答案 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内容更改我输入的占位符值。