2015-11-03 22 views
5

Tôi đang nâng cấp từ phiên bản Parse v1.6.4 lên phiên bản mới nhất và tôi cũng đang nâng cấp facebook ios sdk lên v4.7. Vấn đề là sau khi ứng dụng được ủy quyền, nó cho thấy một màn hình trắng trống và nếu tôi nhấp vào "thực hiện", nó đóng safari và trong nhật ký nó cho thấy rằng, người dùng hủy đăng nhập.
Nó hoạt động tốt trước khi nâng cấp lên phiên bản mới.Màn hình trắng trống trên iOS-Facebook sau khi ứng dụng được ủy quyền

plist tôi

<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> 

trắng niêm yết FB máy chủ

<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"); 

       } 
      } 
     }]; 
    } 
} 

Dưới đây là một hình ảnh của màn hình.

enter image description here

Tôi đang chạy ứng dụng thử nghiệm này trong thiết bị IPhone 6 của mình.
Cảm ơn bạn! :)

Sửa 1:
Hôm nay, tôi nâng cấp dự án của tôi để SDK v4.8 mới của Facebook và lần này, nó có vẻ như nó làm việc.
Tôi không chắc chắn, những gì tôi đã làm sai tại thời điểm đó nhưng nó làm việc bây giờ cho các thiết bị arm64.
Nhưng khi tôi bật hỗ trợ cho armv7s, nó đem lại cho tôi lỗi này ...

ld: file is universal (4 slices) but does not contain a(n) armv7s slice: 

Nó trỏ đến FBSDKLoginKit.framework.
Thiết bị armv7 có được hỗ trợ nữa không?
Có cách nào để loại bỏ lỗi này không?
Cảm ơn bạn! :)

+0

Cảm ơn Dharmesh! Bây giờ tốt hơn nhiều! Bạn đã làm nó như thế nào? Tôi có nghĩa là, bằng cách sử dụng một số trang web lưu trữ hình ảnh hoặc cái gì khác? – Alex

+0

bạn cần danh tiếng để đính kèm hình ảnh. – anhtu

+0

Oh ok :) Cảm ơn bạn, anhtu! – Alex

Trả lời

3

tôi đã cùng một vấn đề và nó bật ra rằng

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 

bị phản đối ở ios 9.0. Tôi cũng đã triển khai phương thức

func application(application: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool 

vì vậy FB SDK đang gọi phương thức sau. Vì vậy, tôi phải đảm bảo rằng tôi gọi FBSDKApplicationDelegate trong cả hai phương pháp (một lần cho ios 8 và một lần cho ios9).

Đây là triển khai thực hiện của tôi về 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 
} 

nơi self.openURL (url) có thể được sử dụng để xử lý các loại url khác bên cạnh những cái facebook.

+0

Bạn cứu sinh. Chữ ký khác biệt tinh tế cho phương thức AppDelegate này khiến chúng tôi mất nhiều thời gian .. – MattD

Các vấn đề liên quan