IOS-Facebook授权应用程序后空白屏幕
我从Parse v1.6.4升级到最新版本,并且我正在将facebook ios sdk升级到v4.7。 问题是应用程序被授权后,它显示一个空白的白色屏幕,如果我点击“完成”,它关闭Safari并在日志中显示,用户取消登录。
将它升级到新版本之前它工作正常。IOS-Facebook授权应用程序后空白屏幕
我的plist
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fbxxxxxx</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string><my FacebookAppID></string>
<key>FacebookDisplayName</key>
<string>my appname</string>
白名单FB服务器
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>facebook.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>fbcdn.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>akamaihd.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
AppDelegate.m
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[FBSDKAppEvents activateApp];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return [[FBSDKApplicationDelegate sharedInstance] application:application
didFinishLaunchingWithOptions:launchOptions];
}
viewController.m
-(IBAction)facebookLogin:(id)sender
{
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
if ([FBSDKAccessToken currentAccessToken])
{
//Do something
}
else
{
[login logInWithReadPermissions:@[@"email"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error)
{
NSLog(@"Error");
}
else if (result.isCancelled)
{
NSLog(@"User cancelled login");
}
else
{
NSLog(@"Login Success");
if ([result.grantedPermissions containsObject:@"email"])
{
NSLog(@"result is:%@",result);
}
else
{
NSLog(@"FB email permission error");
}
}
}];
}
}
这里是屏幕的图像。
我在我的IPhone 6设备上运行这个测试程序。
谢谢! :)
编辑1:
今天,我升级我的项目Facebook的新V4.8 SDK,这一次,它似乎像它的工作。
我不确定,那时我做错了什么,但现在它正在为arm64设备工作。
但是,当我启用armv7s支持,它给我这个错误...
ld: file is universal (4 slices) but does not contain a(n) armv7s slice:
它指向FBSDKLoginKit.framework。
armv7s设备不再被支持吗?
无论如何摆脱这个错误?
谢谢! :)
我有同样的问题,事实证明,
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
在IOS 9.0已经过时了。我也执行了方法
func application(application: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool
所以FB SDK调用后者。 所以,我必须确保我打电话FBSDKApplicationDelegate在这两种方法(一次IOS 8和一次ios9)。
这是我实现的AppDelegate的:
@available(iOS 9.0, *)
func application(application: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
let handled = FBSDKApplicationDelegate.sharedInstance().application(application,
openURL: url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String,
annotation: options [UIApplicationOpenURLOptionsAnnotationKey])
if !handled {
return self.openURL(url)
}
return true
}
@available(iOS, introduced=8.0, deprecated=9.0)
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
let handled = FBSDKApplicationDelegate.sharedInstance()
.application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
if !handled {
return self.openURL(url)
}
return true
}
其中self.openURL(URL)可以被用来处理Facebook的那些旁边其他类型的URL。
您lifesaver。这个AppDelegate方法的微妙不同的签名花了我们许多小时。 – MattD
谢谢Dharmesh!现在好多了!你是怎么做到的?我的意思是,通过使用一些图像托管网站或其他东西? – Alex
您需要声望才能附加图片。 – anhtu
哦,好的:)谢谢你,anhtu! – Alex