2016-12-21 6 views
2

ユーザーが既に(完全に正常に動作している)読み取り権限でログインしたら、私は彼を依頼する必要がある権限を公開:Facebookの権限がクラッシュ

NSArray *publishPermissions = @[@"publish_actions", @"user_photos"]; 
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login logInWithPublishPermissions:publishPermissions fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     NSLog(@"FB error: %@ || result: %@", error, result); 
    }]; 
} 

与えられたコードスニペットに私はちょうどpublish_actionsを求める場合すべて正常に動作していると私はログを取得します。私がちょうどuser_photosを要求するか、または両方のアプリが一般的なNSExceptionでクラッシュしている場合。

なぜuser_photosがこのような問題を引き起こしているのか、それを動作させるにはどうすればよいですか?

答えて

0

で正常に動作している、それが唯一の公共権限がpublicまたはmanagedを扱う始まることを出かけ、他のすべてのアプリがクラッシュします。

-1

これを置き換えます。これはFacebookの-Swiftの実装に基づか私のアプリ

FBSDKLoginManager *login = [[FBSDKLoginManager alloc]init]; 
     [FBSDKAccessToken setCurrentAccessToken:nil]; 

     [login logInWithReadPermissions: @[@"public_profile", @"email", @"user_friends",@"user_birthday"] 
     fromViewController:self 
     handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 

      if ([FBSDKAccessToken currentAccessToken]) { 
       [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email,name,birthday,first_name,last_name,gender"}] 
        startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 
        { 
         if (!error) 
         { 
} 
         else 
         { 
          NSLog(@"error : %@",error); 
         } 
        }]; 
      } 
     }]; 
+0

うわを。私はユーザープロフィールを読んでみたくない。私はそれに書きたい。その答えは全く役に立たない。そして、 'user_photos'とは全く共通点がありません!あなたは質問を..読みましたか? – Vive

0

あなたはこのコードからすべてを取得することができます:

{ 
NSString *getFbid; 
NSString *getFbFirstName,*getFBlastName, *getFbemail,*getfbBirthday,*getfbGender,*getFBpHone,*getFBlocation,*getFBcountry; 

} 



-(void)loginButtonClicked 
{ 



FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
[login 
logInWithReadPermissions: @[@"public_profile", @"user_friends", @"email"] 
fromViewController:self 
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    if (error) { 
     DLog(@"Process error======%@",error.description); 
     indicators.hidden=YES; 
     [indicators stopAnimating]; 
    } else if (result.isCancelled) { 
     DLog(@"Cancelled"); 
     indicators.hidden=YES; 
     [indicators stopAnimating]; 
    } else { 

     if ([FBSDKAccessToken currentAccessToken]) { 



      [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , gender ,friendlists"}] 
       startWithCompletionHandler:^(
              FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
        if (!error) 
        { 

         // NSLog(@"fetched user:%@", result); 

         // [self fetchingFacebookFriends]; 

         [defFacebookData setObject:[result objectForKey:@"email"] forKey:@"fbEmail"]; 

         [defFacebookData setObject:[result objectForKey:@"id"] forKey:@"fbID"]; 


         //PASS ID 
         getFbid = [result objectForKey:@"id"]; 
    NSLog(@"getFbid========>%@",getFbid); 

         //PASS FIRST NAME 
         getFbFirstName=[result objectForKey:@"first_name"]; 

    NSLog(@"first======>%@",getFbFirstName); 

         //PASS LAST NAME 
         getFBlastName=[result objectForKey:@"last_name"]; 
    NSLog(@"first======>%@",getFBlastName); 

         //PASS EMAIL 
         getFbemail=[result objectForKey:@"email"]; 
    NSLog(@"first======>%@",getFbemail); 

         //PASS PHONE 
         getfbGender=[result objectForKey:@"gender"]; 
    NSLog(@"first======>%@",getfbGender); 


         [defFacebookData setObject:[result objectForKey:@"name"] forKey:@"fbName"]; 

         // Image 
         FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] 
                initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"] 
                parameters:nil 
                HTTPMethod:@"GET"]; 
         [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, 
                  id fbImageResult, 
                  NSError *error) { 

NSString *strURL = [NSString stringWithFormat:@"%@",[[fbImageResult objectForKey:@"data"] objectForKey:@"url"]]; 

    NSLog(@"strURL=====>%@",strURL); 

[defFacebookData setObject:strURL forKey:@"fbImage"]; 

          [defFacebookData synchronize]; 


          NSDictionary *fbdict=[NSDictionary dictionaryWithObjectsAndKeys:getFbid,@"id",getFbFirstName,@"first_name",getFBlastName,@"last_name",getFbemail,@"email",getfbGender,@"gender",strURL,@"fbImage", nil]; 

          NSLog(@"done=========>%@",fbdict); 


         }]; 
        } 
        else{ 

         DLog(@"error is %@", error.description); 
        } 
       }]; 
     } 
    } 
}]; 
} 
+0

これは何も公開しません(すべてGETです)。また、画像の問題にも触れません。あなたは質問を..読みましたか? – Vive

0
Swift 3 IOS 10.2 

First: 

@IBAction func goLoginFacebook(_ sender: UIButton) { 

     let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 

     fbLoginManager.logIn(withReadPermissions: ["email"], from: self) { (result, error) in 
      if (error == nil){ 
       let fbloginresult : FBSDKLoginManagerLoginResult = result! 
       if fbloginresult.grantedPermissions != nil { 
        if(fbloginresult.grantedPermissions.contains("email")) 
        { 
         self.getFBUserData() 
//      fbLoginManager.logOut() 
        } 
       } 
      } 
     } 
    } 

    func getFBUserData(){ 
     if((FBSDKAccessToken.current()) != nil){ 
      FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in 
       if (error == nil){ 
        self.dict = result as! [String : AnyObject] 
        print(result!) 
        print(self.dict) 
        self.performSegue(withIdentifier: "segueFacebookNavigator", sender: self) 

       } 
      }) 
     } 
    } 

Second: Where require publish add 

@IBAction func goPublishFacebook(_ sender: UIButton) { 


     if FBSDKAccessToken.current() != nil 
     { 

      print("User is logged in") 

      if !(FBSDKAccessToken.current().hasGranted("publish_actions")) { 

       print("Request publish_actions permissions") 
       requestPublishPermissions() 
      } 
      else{ 
       sendVideoFacebook() 
      } 



     }else 
     { 
      print("User is not logged in") 

     } 
    } 

    func requestPublishPermissions() 
    { 
     let login: FBSDKLoginManager = FBSDKLoginManager() 

     login.logIn(withPublishPermissions: ["publish_actions"], from: self) { (result, error) in 
      if (error != nil) { 
       print(error!) 
      } else if (result?.isCancelled)! { 
       print("Canceled") 
      } else if (result?.grantedPermissions.contains("publish_actions"))! { 
       print("permissions granted") 
       self.sendVideoFacebook() 
      } 
     } 
    } 


    private func sendVideoFacebook() 
    { 
     var pathURL: NSURL 
     var videoData: NSData 
     // self.pathVideo path file in disc 
     pathURL = NSURL(string: self.pathVideo)! 
     videoData = try! NSData.init(contentsOf: NSURL(fileURLWithPath: self.pathVideo) as URL) 

     let strDesc = txtMessage.text! 
     let videoObject: [String : AnyObject] = ["title": "application LetsMovies" as AnyObject, "description": strDesc as AnyObject, pathURL.absoluteString!: videoData] 
     let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me/videos", parameters: videoObject, httpMethod: "POST") 


     self.view!.isUserInteractionEnabled = false 

     graphRequest.start(completionHandler: { (connection, result, error) -> Void in 
      self.view!.isUserInteractionEnabled = true 
      if ((error) != nil) 
      { 
       // Process error 
       print("Error: \(error)") 
      } 
      else 
      { 
       self.dict = result as! [String : AnyObject] 
       print(result!) 
       print(self.dict) 

      } 
     }) 


    } 
+0

あなたの答えはクラッシュを説明していません。 iOSの実装が 'user_photos'パーミッション要求を読み込まないため、クラッシュが起こっていました。これはFacebook APIのバグです(少なくともクラッシュするのではなくエラーが返されるはずです)。 – Vive

-1
if ([FBSDKAccessToken currentAccessToken]) 
{  
    NSMutableDictionary* parameters = [NSMutableDictionary dictionary]; 
    [parameters setValue:@"name,picture.type(large),first_name,last_name,gender,email,birthday" forKey:@"fields"]; 

    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 
    { 
     if (error) 
     { 
      NSLog(@"Error --> :%@",error); 
     } 
     else 
     { 
      [self createUserInfoDictionary:result]; 
     } 
    }]; 
} 
else 
{ 
    if (FBSDKLoginBehaviorSystemAccount) 
    { 
     FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 

     [login setLoginBehavior:FBSDKLoginBehaviorSystemAccount]; 

     [login logInWithReadPermissions:@[@"public_profile",@"email",@"user_birthday",@"user_about_me"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) 
     { 
      if (error) 
      { 
       NSLog(@"Error --> :%@",error); 
      } 
      else 
      { 
       if ([FBSDKAccessToken currentAccessToken]) 
       { 
        NSMutableDictionary* parameters = [NSMutableDictionary dictionary]; 
        [parameters setValue:@"name,picture.type(large),first_name,last_name,gender,email,birthday" forKey:@"fields"]; 

        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters] 
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 
         { 
          if (!error) 
          { 
           [self createUserInfoDictionary:result]; 
          } 
         }]; 
       } 
      } 
     }]; 
    } 
} 
+0

まず、Facebook開発者アカウントを作成し、そのAPIキーを取得するには、プロジェクトinfo.plistファイルを追加してFacebook SDKを取得し、Facebook SDKをプロジェクトに組み込み、このコードを試す必要があります。 –

関連する問題