3

正如我们所知,对于 Facebook SDK,我们应该在 App Plist 中提供URL 类型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 将密钥存储在其他地方。

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

4

3 回答 3

7

这似乎对我有用,可以设置 App ID:

[FBSettings setDefaultAppID: @"123456789"];

我不知道 URL 类型是否有类似的东西。但是,我可以想象注册 URL 类型是 iOS 在安装应用程序时所做的事情,因此如果是这种情况,它可能需要在 plist 文件中而不是在代码中。

于 2013-06-14T00:10:53.570 回答
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。但不要忘记在进行任何更改后调用同步。这是 NSUserDefaults 文档。我认为这不是将任何数据写入您的 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];
    }
}
于 2012-12-25T13:20:58.777 回答
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 内容更改我输入的占位符值。

于 2015-09-02T11:30:46.363 回答