关于准则1.2-安全-用户生成的内容

时间:2019-03-06 05:26:20

标签: ios appstore-approval

根据AppStore准则1.2-安全-用户生成的内容 对于点 -一种过滤不良内容的方法

在应用程序中实现“过滤不良内容的方法”的方法是什么?

我的应用程序包含视频上传,视频评论,上线功能

还请建议任何第三方库来实施过滤令人反感的内容

2 个答案:

答案 0 :(得分:2)

@dahiya_boy excellent answer为基础。这是我在应用程序中完成的方式,我获得了批准。

  
      
  1. 一种过滤有害材料以将其发布到应用程序的方法
  2.   

您无需在发布内容之前对其进行过滤。例如,如果某人正在发布裸照,则不需要AI在发布图片之前先弄清楚其中的内容。 AI会出错,有太多不同的事情可以并且不能被认为是令人反感的。苹果公司想要您做的是过滤所有被阻止用户的信息。例如:

您的应用有2个标签,第一个标签上的用户可以查看其他用户的照片,第二个标签上的用户可以查看其他用户的消息。在这两个标签中,照片和消息均被视为用户生成的内容

如果userA在tab1中并且看到他们认为来自userB的冒犯,则userA可以阻止userB。一旦建立了阻止机制,userA将不再在tab1中看到来自userB的任何照片,也不会在tab2中看到来自userB的任何消息。

在这种情况下,用户B的照片和消息被过滤,因此用户A无法看到它们。这就是Apple所追求的(我刚刚获得批准是因为我使用了该方法)。他们希望这样做,以便阻止某人的用户将不再能够从他们阻止的用户那里看到任何令人反感的。我不确定这是来自其他用户的特定帖子(令人反感的帖子)还是来自其他用户的所有帖子。为了安全起见,我所做的就是封锁所有帖子。下面的代码示例概述了我的操作方式。

对于具有这两个选项卡的此示例,需要在两个选项卡中都使用此阻止机制,以便如果userA阻止userB的消息,则userA也将无法使用userB的照片。

我添加的另一件事是,一旦userA阻止了userB,那么userB就看不到来自userA的任何照片或消息,我不确定这是否是强制性的,但这就是我的方式。这基本上是一条2条路,但可能并不重要。

  
      
  1. 阻止滥用用户使用该服务的功能
  2.   

一旦按下阻止按钮,一个用户就可以阻止另一个用户,这样第一个用户就不会再看到第二个用户的任何东西。基本上就是我上面所描述的。

  
      
  1. 一种报告令人反感的内容并及时解决问题的机制
  2.   

“报告”按钮。在用户生成的内容中的任何内容(例如帖子,照片或消息)上,都需要有一个按钮来进行报告,并且您必须让他们知道它将在24小时内得到审核,如果不适当,它将在该时间范围内删除,您将对发布该消息的用户采取一些措施(Apple希望您禁止他们使用该应用程序。)

我的审稿人非常细致。最初,按钮只是说“报告”。如果您按了它,就会出现一个警告,提示“是不适当”,带有“是”按钮和“取消”按钮。

我有2个拒绝,它们说了“这并不表示他们举报了任何令人反感的内容”和“这并不表示它将在24小时内删除”。

我必须更改它,以便报告按钮显示“ Report Inappropriate”(报告不适当),按下按钮后,警报标题和消息显示(标题)“ Report Inappropriate”和(消息)该帖子不合适吗?我们将在24小时内审阅此报告,如果认为不合适,则会在该时间范围内删除该帖子。我们还将对它的作者采取行动。”

  
      
  1. 发布了联系信息,以便用户可以轻松地与您联系。
  2.   

您不需要在操作表中使用“与我们联系”按钮。

只要应用内有任何地方,用户就可以与您联系。在“设置”中,我有一个显示“联系我们”的单元格,在“联系我们”视图控制器内部,我有公司地址和电子邮件地址。

这些是我用来通过应用程序的4种方法。

另一方面,实现阻止功能的最佳方法是使用blockedUsers引用,如果用户向其中添加了某人,则该人的userId将位于该引用中。每当发起阻止的用户位于拉动消息或帖子等数据的选项卡中时,您都需要在被阻止的ref内进行检查,并从他们阻止的任何人中过滤掉所有帖子。

例如。

@-blockedUsers
     |
     @----userA_userID
             |
             @----userB_userId: true

使用下面的方法,userB的任何帖子都不会显示在userA的“帖子”标签中。

let currentUserID = Auth.auth().currentUser!.uid

Database.database().reference().child("posts")
  .queryOrderedByKey()
  .queryLimited(toLast: 10)
  .observeSingleEvent(of: .value) { (snapshot) in

     if !snapshot.exists() { return }

     guard let firstChild = snapshot.children.allObjects.first as? DataSnapshot else { return }

     for child in snapshot.children.allObjects as! [DataSnapshot] {

         if let postDict = child.value as? [String: Any] {

            let post = Post(dict: postDict)
            let userBsUserID = post.userId // UserB is really every user who created a post. I just used UserB for demo purposes. A more accurate term would be “otherUsersID” or “posterID”

            let blockedUsersRef = Database.database().reference().child("blockedUsers").child(currentUserID)
            blockedUsersRef.observeSingleEvent(of: .value) { (snapshot) in

                // if the currentUser isn't inside this blockedUsersRef then neither is userB
                if !snapshot.exists() {

                     self.dataSource.append(post)
                     self.collectionView.reloadData()

                     // *** OR now use this same method to check this currentUserID against userB to make sure it isn't in their blockedUsersRef either before adding their post to the datasource ***
                     return
                }

                // if the currentUserID does exist then check if userB is inside their blockedUsersRef
                for child in snapshot.children {
                    let snap = child as! DataSnapshot

                    if snap.key == userBsUserID {
                        // userB IS inside the currentUserId's blockedUsersRef so DON't ADD their post to the datasource
                        return
                    }
                }

                // userB ISN'T inside the currentUser's blockedUsersRef so ADD the post to the datasource
                self.dataSource.append(post)
                self.collectionView.reloadData()

                // *** OR now use this same method to check this currentUserID against userB to make sure it isn't in their blockedUsersRef either before adding their post to the datasource ***
            })
         }
     }
})

如果您想针对其他用户进行过滤,则只需在将帖子添加到数据源之前再次做同样的事情即可。

似乎很多步骤,但是当审阅者对它进行测试时我通过了

答案 1 :(得分:1)

通过引用苹果doc

  
      
  1. 一种过滤有害材料以免将其发布到应用程序的方法
  2.   

像instagram一样,您可以添加按钮不再向我显示此帖子,以此为基础,您可以过滤该用户的数据。

  
      
  1. 一种报告令人反感的内容并及时解决问题的机制
  2.   

在每个帖子中添加报告选项,这样,如果有人针对该帖子进行举报,那么您可以以敏感帖子的身份提醒其他用户,您确定要看到此消息。或者,如果有骚扰,请从您的应用中删除该帖子。

instagram的示例图片。

enter image description here

  
      
  1. 阻止滥用用户使用该服务的功能
  2.   

如果有人不断违反您的应用程序隐私和协议,请暂时暂停该帐户。

  
      
  1. 发布了联系信息,以便用户可以轻松地与您联系。
  2.   

添加联系人页面,用户可以在其中报告某些帖子或用户或任何查询。

1、3、4点的样本图像

enter image description here


这些是每个社交应用程序都遵循的基本协议,因此您可以从任何应用程序中获取参考。