簡體   English   中英

openActiveSessionWithPublishPermissions / requestNewPublishPermissions publish_actions未添加權限

[英]openActiveSessionWithPublishPermissions / requestNewPublishPermissions publish_actions not adding permission

使用SDK 3.22.0。

if (FBSession.activeSession.isOpen) {
    [FBSession.activeSession
     requestNewPublishPermissions:@[@"publish_actions"]
     defaultAudience:FBSessionDefaultAudienceFriends
     completionHandler:^(FBSession *session, NSError *error) {
         NSLog(@"error = %@", error);
         NSLog(@"session open = %d", session.isOpen);
         NSLog(@"session.permissions = %@", session.permissions);
         NSLog(@"session.accessTokenData.declinedPermissions = %@", session.accessTokenData.declinedPermissions);
     }];
}
else {
    [FBSession
     openActiveSessionWithPublishPermissions:@[@"publish_actions"]
     defaultAudience:FBSessionDefaultAudienceFriends
     allowLoginUI:YES
     completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
         NSLog(@"error = %@", error);
         NSLog(@"session open = %d", session.isOpen);
         NSLog(@"status = %lu", status);
         NSLog(@"session.permissions = %@", session.permissions);
         NSLog(@"session.accessTokenData.declinedPermissions = %@", session.accessTokenData.declinedPermissions);
     }];
}

我正在與尚未發布權限且從未拒絕的用戶進行測試。 在此帳戶的“ FB應用程序設置”上,“應用程序可見性”設置為“好友”,並且發布權限甚至在設置列表上都沒有,其他用戶/應用程序也沒有。

在這兩種代碼中,FB應用程序均會打開並立即返回我的應用程序,而無需征求許可。 的響應declinedPermissions是與陣列publish_actions

我的期望是FB應用程序將要求用戶批准發布。

我收到了多個遇到相同問題的用戶的報告-無法添加發布權限,但有些人可以獲得該權限。

要補充的一件事是,在將應用程序提交給測試組以外的用戶進行FB批准之前,我遇到了同樣的問題,但是當應用程序獲得批准時,它便開始為這些用戶使用。 現在看來,即使是對於隨機用戶,即使該應用程序獲得批准,問題仍然存在。

我要求許可的方式有問題嗎?

看起來像這樣工作:

- (BOOL)hasWritePermissions {
    if (!FBSession.activeSession.isOpen) return NO;
    return [FBSession.activeSession.permissions indexOfObject:@[@"publish_actions"]] != NSNotFound;
}

- (void)requestWritePermissions:(void(^)(BOOL status, NSError *error))callback {
    if (self.hasWritePermissions) {
        callback(YES, nil);
        return;
    }

    if (FBSession.activeSession.isOpen) {
        [FBSession.activeSession
         requestNewPublishPermissions:@[@"publish_actions"]
         defaultAudience:FBSessionDefaultAudienceFriends
         completionHandler:^(FBSession *session, NSError *error) {
             NSLog(@"error = %@", error);
             NSLog(@"session open = %d", session.isOpen);
             NSLog(@"session.permissions = %@", session.permissions);
             NSLog(@"session.accessTokenData.declinedPermissions = %@", session.accessTokenData.declinedPermissions);

             if (self.hasWritePermissions) {
                 callback(YES, nil);
             }
             else {
                 callback(NO, error);
             }
         }];
    }
    else {
        [FBSession
         openActiveSessionWithPublishPermissions:@[@"publish_actions"]
         defaultAudience:FBSessionDefaultAudienceFriends
         allowLoginUI:YES
         completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
             NSLog(@"error = %@", error);
             NSLog(@"session open = %d", session.isOpen);
             NSLog(@"status = %u", status);
             NSLog(@"session.permissions = %@", session.permissions);
             NSLog(@"session.accessTokenData.declinedPermissions = %@", session.accessTokenData.declinedPermissions);

             [self requestWritePermissions:callback]; // this time, with an open session
         }];
    }
}

如果沒有會話,則運行openActiveSessionWithPublishPermissions ,然后再次運行requestNewPublishPermissions

問題是, openActiveSessionWithPublishPermissions甚至沒有去Facebook應用程序就獲得更多權限就觸發了回調(看起來像FB bug,將會報告),但是這種方法似乎可以解決它。

我發現的另一個問題是session.permissions並不總是反映Facebook上的權限。 我發現確保擁有最新權限的唯一方法是發出API請求:

[FBRequestConnection startWithGraphPath:@"/me/permissions" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {

並檢查result.data數組是否授予/拒絕權限。

我對此方法也有類似的問題。 我最終以一整套權限(讀和寫)打開了會話,這解決了我的問題。

-(void)requestPublishPermissionsWithCompletion:(FBHandlerComp)completion{

if (self.session.isOpen && [self.session.permissions  containsObject:@"publish_actions"]){
    //we have an open session and all neceassarry pemissions
    completion(true,nil);
}else{
    //something in missing, to account to all diffrent scenarios (missing persmission, expired tokens, changes in user sessting etc..), we reinisilise the session and request permissions

      //for publish permissions we need to ask for the whole set( read& publish)
    NSMutableArray *permissions = [NSMutableArray arrayWithArray:self.writePersmissions];
    [permissions addObjectsFromArray:self.readPersmissions];


    self.session = [[FBSession activeSession]initWithAppID:nil permissions:permissions defaultAudience:FBSessionDefaultAudienceFriends urlSchemeSuffix:nil tokenCacheStrategy:nil];

    [self openFacebookSessionWithCompleteion:^(BOOL result, NSError *error) {    
    if (result) {

        completion(true,nil);

    }else{
        if (LOGGING_IS_ON) DebugLog(@"could not get publish permissions- could not open session %@",error);
         completion(false,nil);
    }
}];

}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM